我正在測試DOM,SAX和StAX的效率。Java解析器測試
基本上我所做的是我使用彈簧秒錶和不同大小的XML,然後比較結果。
我還認爲我可以測量時間,而元素加載到對象和對象數組,但這與分析無關。
這裏是我的SAX
StopWatch stopWatch = new StopWatch("SAX");
stopWatch.start("SAX");
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setValidating(false);
SAXParser sp = spf.newSAXParser();
XMLReader parser = sp.getXMLReader();
parser.setErrorHandler(new Chyby());
parser.setContentHandler(new DefaultHandler());
parser.parse(file);
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
代碼爲 StAX的
int temp = 0;
StopWatch stopWatch = new StopWatch("StAX");
stopWatch.start("StAX");
XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader r = f.createXMLStreamReader(new FileInputStream(file));
while (r.hasNext()==true){
temp++;
r.next();
}
System.out.println("parsed");
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
DOM
StopWatch stopWatch = new StopWatch("DOM");
stopWatch.start("DOM");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(subor);
System.out.println("parsed");
System.out.println("----------------\n");
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
我的問題是:我這樣做對嗎?還有其他的方法來測試解析器嗎? 謝謝
我不明白第二個感嘆號。我應該用建築物來衡量嗎? :) – ivanz 2013-05-02 00:41:59
@sevdah - 通過觸摸所有數據我的意思是將所有文本節點和屬性值作爲字符串,以確保測試儘可能均勻。例如,一個懶惰的DOM impl在解析調用時可能不會做任何事情,並且只會在樹遍歷時才構建DOM節點,使得解析調用顯得非常快。 – 2013-05-02 00:48:06
這是我的第一個測試版本,但是後來我意識到我的用於獲取所有節點的代碼並不一定要「寫得很好」。另一件事是我有system.out.println中的所有文本節點,這也需要一些時間。那麼我應該如何使遍歷整個文檔,但沒有什麼可以顯示? – ivanz 2013-05-02 00:53:10