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
          主站蜘蛛池模板: 水城县| 托里县| 嘉黎县| 广德县| 彭泽县| 无极县| 三河市| 汝城县| 烟台市| 安化县| 达日县| 沛县| 新化县| 奉节县| 小金县| 巨鹿县| 泽州县| 永清县| 昌黎县| 达尔| 滦南县| 玛多县| 盐边县| 宜阳县| 望江县| 岳西县| 景宁| 武鸣县| 宝应县| 石景山区| 乡城县| 临清市| 通辽市| 祁阳县| 屏东县| 溧水县| 商城县| 四会市| 彝良县| 子洲县| 镇坪县|