让 JAXB 走得更快

2024-04-04

我有一个 8 兆文件。使用 JAXB 编组需要 1082 毫秒,使用 DOM 需要 862 毫秒,使用 SAX 需要 438 毫秒。这是使用 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();

这使得它运行得更慢 - 3207ms。

我的问题是: 1. 如何让 JAXB 运行得更快? 2.我怎样才能100%确定它使用的底层解析机制是什么?


1 - 如何让 JAXB 运行得更快?

从 StAX 输入解组的方式是正确的,但我建议使用 XMLStreamReader 而不是 XMLEventReader。

XMLInputFactory xmlif = XMLInputFactory.newInstance();
XMLStreamReader xmler = xmlif.createXMLStreamReader(fr);

由于 StAX 是一个标准,您可以切换到另一个实现,例如WoodStox http://woodstox.codehaus.org/作为底层解析器。

2 - 我怎样才能 100% 确定它正在使用什么底层解析机制?

就像你正在做的那样。如果您传递 JAXB 实现的一个实例XMLStreamReader那么您就可以合理地确定它正在被使用。另一方面,如果您从类似的东西中解组InputStream那么 JAXB 实现就可以自由地使用它想要的任何解析技术。如果您选择 Woodstox,请务必查看其性能页面:

  • http://woodstox.codehaus.org/Performance http://woodstox.codehaus.org/Performance
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 JAXB 走得更快 的相关文章

随机推荐