我正在尝试在异步环境中设置 Aalto-xml (Woodstox),但在弄清楚如何正确执行时遇到了麻烦!
我的流程是:
预分配“AsyncStreamReader”
xmlInputFactory.createAsyncForByteArray();
从套接字接收 XML 流
使用数据馈送 streamReader
streamReader.getInputFeeder().feedInput(bytes, 0, bufSize);
循环解析不同的 XML 标签:
while (streamReader.hasNext()) {...}
Last
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