Mor*_*ive 12 xml performance jaxb jaxp
我有一个8兆的文件.使用JAXB进行编组需要1082ms,使用DOM需要862ms,使用SAX需要438ms.这是使用JDK 1.6的所有默认值,没有使用诸如使用woodstox之类的额外配置.
为了从JAXB获得更好的性能,我试着让它使用SAX解析...
FileReader fr = new FileReader("myfile.xml");
JAXBContext jc = JAXBContext.newInstance(MyObjectList.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
XMLInputFactory xmlif = XMLInputFactory.newInstance();
XMLEventReader xmler = xmlif.createXMLEventReader(fr);
long beginTime = System.currentTimeMillis();
MyObjectList obj = (MyObjectList)unmarshaller.unmarshal(xmler);
long endTime = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
这使它变得更慢 - 3207ms.
我的问题是:1.如何让JAXB更快?2.我怎样才能100%确定它使用的底层解析机制?
bdo*_*han 17
1 - 如何让JAXB更快?
你是从StAX输入解组的正确轨道,但我建议使用XMLStreamReader而不是XMLEventReader.
XMLInputFactory xmlif = XMLInputFactory.newInstance();
XMLStreamReader xmler = xmlif.createXMLStreamReader(fr);
Run Code Online (Sandbox Code Playgroud)
由于StAX是标准,因此您可以将另一个实现(例如WoodStox)切换为基础解析器.
2 - 我怎样才能100%确定它使用的底层解析机制?
就像你在做的那样.如果您传递JAXB实现的实例,XMLStreamReader那么您可以合理地确定它正在被使用.另一方面,如果你从类似的东西解组,InputStream那么JAXB实现可以自由地使用它想要的任何解析技术.如果您使用Woodstox,请务必查看性能页面:
我还没有尝试过这些,但 EclipseLink 提供了 JAXB 实现。http://www.eclipse.org/eclipselink/moxy.php Jibx 应该很快,但我不认为它是 JAXB 实现。虽然它做同样的事情。http://jibx.sourceforge.net/index.html
如果 EclipseLink 兼容,那么您应该可以将其放入并尝试。不确定测试 Jibx 的努力。