最近一直在做接口,主要用对xml的解析用的是sax,下面我对sax的几种写法做了一个测试:
public class TestSax {
MyHandler handler;
public List<Student> inFile01(String str){
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sap;
try {
sap = spf.newSAXParser();
handler=new MyHandler();
sap.parse(str, handler);
} catch (Exception e){
}
return handler.getList();
}
public List<Student> inFile02(File file){
InputStream is;
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sap;
try {
is = new FileInputStream(file);
sap = spf.newSAXParser();
handler=new MyHandler();
sap.parse(is, handler);
} catch(Exception e){
}
return handler.getList();
}
public List<Student> inFile03(File file){
InputStream is;
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sap;
try {
is = new FileInputStream(file);
sap = spf.newSAXParser();
XMLReader xr=sap.getXMLReader();
handler=new MyHandler();
xr.setContentHandler(handler);
xr.parse(new InputSource(is));
} catch(Exception e){
}
return handler.getList();
}
public static void main(String args[]) throws FileNotFoundException{
TestSax ts=new TestSax();
long start=System.currentTimeMillis();
long freeMemory01 =Runtime.getRuntime().freeMemory();
//List<Student> list=ts.inFile02(new File("F:/student.xml"));
List<Student> list=ts.inFile01("F:/student.xml");
long end=System.currentTimeMillis();
long freeMemory02 =Runtime.getRuntime().freeMemory();
System.out.println("耗时:"+(end-start));
System.out.println("当前 Java 虚拟机中的使用内存量:" + (freeMemory01-freeMemory02) + " 字节");
for(Student stu:list){
System.out.println(stu.getName());
System.out.println(stu.getAge());
System.out.println(stu.getEnglish());
}
}
}
public class MyHandler extends DefaultHandler {
Student st=null;
String preTag = null;
String currentTag=null;
List<Student> list;
@Override
public void startDocument() throws SAXException {
super.startDocument();
list=new ArrayList<Student>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
currentTag=qName;
if(currentTag.equals("info"))
st=new Student();
preTag=qName; //将正在解析的节点名称赋给preTag
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
String text = new String(ch, start, length);
if(preTag==null) return;
if(currentTag.equals("name"))
{
st.setName(text);
}else if(currentTag.equals("age")){
st.setAge(Integer.parseInt(text));
}else if(currentTag.endsWith("english")){
st.setEnglish(Integer.parseInt(text));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if("info".equals(qName)){
list.add(st);
st=null;
}
preTag=null;
}
public List<Student> getList() {
return list;
}
}
public class Student {
public Student(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getEnglish() {
return English;
}
public void setEnglish(int english) {
English = english;
}
private String name;
private int age;
private int English;
}
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<students>
<info>
<name>Lily</name>
<age>18</age>
<english>60</english>
</info>
<info>
<name>Bobi</name>
<age>19</age>
<english>70</english>
</info>
<info>
<name>Lucky</name>
<age>20</age>
<english>80</english>
</info>
<info>
<name>Lucy</name>
<age>21</age>
<english>80</english>
</info>
<info>
<name>Amy</name>
<age>23</age>
<english>90</english>
</info>
<info>
<name>Jeff</name>
<age>20</age>
<english>56</english>
</info>
<info>
<name>Michel</name>
<age>25</age>
<english>56</english>
</info>
<info>
<name>Jay</name>
<age>30</age>
<english>56</english>
</info>
</students>
对上面的三个方法我测试了一下:
93 milliseconds 2071984 字节 inFile01
93 milliseconds 2055512 字节 inFile02
78 milliseconds 2055504 字节 inFile03
从上面的测试结果来看,如果有可能,尽可能的用到xmlReader这个。
分享到:
相关推荐
xml sax解析
xml
java xmlSAX 解析,简单易使用。
SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml...
绝对可用的SAX解析XML文件项目,费了九牛二虎之力,才找到的好资源,特与大家共享出来。直接导入eclipse就可运行,无需任何配置。
Sax解析XML文件解
本代码是我对博客的xml解析----------Sax解析的代码重写了,一份,给需要的朋友,做参考。
Android SAX 解析XML SAX 解析XML(通用)
Java SAX解析Xml Demo(详细注释)
XML解析之SAX解析DEMO,之前在播控上有介绍,但是代码排版太乱了,这个就是Android4.0网络编程中的SAX解析例子。
Sax解析xml文件详细例子,解析复杂节点的xml,把内容显示到view中,例子简单完整,易用
SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码
java学习笔记——使用DOM解析XML和使用SAX解析XML
Servlet利用SAX解析XML文档,JAX,JSWDP,Servlet利用SAX解析XML文档
XML通过SAX解析为JSON格式的文档 例子中的类稍微修改可以做做到公用
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
使用java语言对XML文档进行解析的示例,包括DOM,SAX方式,并包括使用jdom和jom4j框架进行XML解析或生成XML文档
sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点,sax解析XML方式的代码及特点
Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有源码)Servlet利用SAX解析XML文档(新上传的有...
sax解析xml本地读取xml,希望对你有用