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 比特鼠 閱讀(2511) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 灵石县| 定远县| 盐津县| 如东县| 汪清县| 彭山县| 绥芬河市| 永德县| 冀州市| 六盘水市| 文化| 永安市| 安阳县| 买车| 鄂尔多斯市| 盐亭县| 定西市| 民勤县| 大方县| 佛冈县| 监利县| 东平县| 陈巴尔虎旗| 新竹市| 博湖县| 乐昌市| 利辛县| 彩票| 瑞金市| 林周县| 克山县| 金阳县| 报价| 石城县| 沅陵县| 姚安县| 苗栗市| 奎屯市| 呼图壁县| 镇平县| 汕头市|