我正在采用的项目是使用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解析器的表现比其他人好。
以下是我想问的两个问题:
答案 0 :(得分:0)
在其他情况下,很可能会进行不必要的初始化(比如构建工厂;或者使用非常慢的服务内省)。
我认为没有比自己构建流阅读器更有效的替代方案,尽管Woodstox至少允许您在没有byte[]
的情况下直接传递ByteArrayInputStream
。这不会产生巨大的差异,但包装没有任何好处。
Aalto XML可能更快:https://github.com/FasterXML/aalto-xml - 这是值得的。