1

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

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

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

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

在大约 5000 次尝试中,StAX-Woodstox 解析器的性能优于其他解析器。

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

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

1 回答 1

0

在其他情况下,很可能会完成不必要的初始化(例如构建工厂;或使用非常慢的服务自省)。我认为没有比自己构建流阅读器更有效的替代方法了,尽管 Woodstox 至少允许您在byte[]没有ByteArrayInputStream. 这很可能不会产生太大的影响,但是包装没有任何好处。

Aalto XML 可能更快:https ://github.com/FasterXML/aalto-xml - 物有所值。

于 2017-06-15T00:31:04.610 回答