byterat

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  54 随笔 :: 0 文章 :: 15 评论 :: 0 Trackbacks

众所周知, Java在从XML文件中装载内容到内存过程中,不论用何种方式,IO操作的开销都无可避免。本文尝试比较dom4j中的XPP3和SAX两种方式装载XML文件的性能,以便将IO操作的开销降到最小!

package gz.lwm;

import java.io.File;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XPP3Reader;

public class TestDom4j {
 private static final Logger log = Logger.getLogger(TestDom4j.class);
 private static long bt; 
 
 public static void main(String[] args) {
  Document doc = DocumentHelper.createDocument();   
  //先运行getXmlSAX()
  bt = System.currentTimeMillis();
  String strXml = getXmlSAX("xml/test.xml");
  if(log.isDebugEnabled()){
   log.debug("\ngetXmlSAX() use time: " + (System.currentTimeMillis() - bt) + " millis\n");
  }

  //再运行getXmlXPP3()
  bt = System.currentTimeMillis();
  String s1 =getXmlXPP3("xml/test.xml");
  if(log.isDebugEnabled()){
   log.debug("\ngetXmlXPP3() use time: " + (System.currentTimeMillis() - bt) + " millis\n");
  }
  
  
 }
 
 public static String getXmlSAX(String xmlFile){
  String result = "";
  try {
   SAXReader reader = new SAXReader();
   Document document = reader.read(new File(xmlFile));
   result = document.asXML();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }
 
 public static String getXmlXPP3(String xmlFile){
  String result = "";
  try {
   XPP3Reader reader = new XPP3Reader();
   Document document = reader.read(new File(xmlFile));
   result = document.asXML();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }


 
}

有没有这一句"Document doc = DocumentHelper.createDocument()",对性能的影响很大,特别是对大xml文件(尽管并没有使用doc)

另外, getXmlXSAX()和getXmlXPP3()运行的先后次序对性能的影响也很大!

测试:
    在我的机器上,对一个100k左右的XML文件进行多次测试后的均值结果为:

    getXmlXPP3() use time: 265 millis
    ...
    getXmlXSAX() use time: 359 millis
    ...

结论:
    通过比较,在读取XML文件上,XPP3略为优于SAX!


注意:

要运行例子,classpath需包含:
dom4j-1.6.1.jar
jaxen-1.1-beta-10.jar
log4j-1.2.9.jar
pull-parser-2.1.10.jar
xpp3-1.1.4c.jar


参考:
dom4j :  http://www.dom4j.org/
XPP   :  http://www.extreme.indiana.edu/xgws/xsoap/xpp/

posted on 2007-05-19 00:39 比特鼠 阅读(2503) 评论(0)  编辑  收藏 所属分类: Java

只有注册用户登录后才能发表评论。


网站导航: