JaxB性能增强

时间:2017-06-14 18:58:28

标签: java performance jaxb stax woodstox

我正在采用的项目是使用JaxB API来解析XML到Java对象。我们将ByteArrayInputStream传递给Unmarshaller,如:

ByteArrayInputStream bais = new BytearrayInputStream(byte[]...)
unmarshaller.unmarshal(bais)

现在我想找到优化这个过程速度的方法,因为字节数组非常小(默认JaxB需要大约1-5ms),但是有很多。我试图将不同的输入传递给Unmarshaller,如StAX,StAX-Woodstox解析器和StreamSource对象进行比较。

unmarshall(..XMLInputFactory -> XMLStreamReader(bais)..)
unmarshall(..XMLInputFactory2 ->XMLStreamReader(bais)..)
unmarshall(..StreamSource(bais)..)

在大约5000次尝试中,StAX-Woodstox解析器的表现比其他人好。

以下是我想问的两个问题:

  • 鉴于这些信息,你能想出一种更好的方法来优化速度吗?
  • 通过StAX-Woodstox解析器提供更好速度的原因是什么?

1 个答案:

答案 0 :(得分:0)

在其他情况下,很可能会进行不必要的初始化(比如构建工厂;或者使用非常慢的服务内省)。 我认为没有比自己构建流阅读器更有效的替代方案,尽管Woodstox至少允许您在没有byte[]的情况下直接传递ByteArrayInputStream。这不会产生巨大的差异,但包装没有任何好处。

Aalto XML可能更快:https://github.com/FasterXML/aalto-xml - 这是值得的。