【发布时间】:2016-12-04 08:13:41
【问题描述】:
我正在尝试在异步环境中设置 Aalto-xml (Woodstox),但在弄清楚如何正确设置时遇到了麻烦!
我的流程是:
-
预分配“AsyncStreamReader”
xmlInputFactory.createAsyncForByteArray(); 从套接字接收 XML 流
-
为流读取器提供数据
streamReader.getInputFeeder().feedInput(bytes, 0, bufSize); -
循环解析不同的XML标签:
while (streamReader.hasNext()) {...} -
在最后一次
XMLEvent.END_ELEMENT被解析 --> 调用:streamReader.getInputFeeder().endOfInput(); -
在
XMLEvent.END_DOCUMENT上做:streamReader = xmlInputFactory.createAsyncForByteArray(); 根据
AsyncXMLStreamReader.EVENT_INCOMPLETE--> 打破循环并等待更多数据提供给解析器。
虽然我知道这是错误的,但我还是这样做了,因为如果我不打电话: 'endOfInput()' 然后当给阅读器提供新的缓冲区时,它会抛出一个异常,就像我没有完成之前的 xml 一样。
让我失望的一点是,为了获得 END_DOCUMENT,您必须调用 endOfInput() 来关闭缓冲区,这样您就无法使用来自套接字的更多输入来提供它...我在这里陷入了循环!
如何修复我的流程?
这是一个带有解析器代码的要点: https://gist.github.com/shvalb/ca9cd526aea31ccf280adf289e0991d7
【问题讨论】:
标签: java xml-parsing stax woodstox