我正在尝试在Async环境中设置Aalto-xml(Woodstox),但是在弄清楚如何正确执行它时遇到了麻烦!
我的流程是:
预先分配'AsyncStreamReader'
xmlInputFactory.createAsyncForByteArray();
从套接字
使用数据
输入streamReader 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()
来关闭缓冲区,这样您就无法使用来自套接字的更多输入来提供它......我陷入了循环在这里!
如何修复流量?
这是一个包含解析器代码的Gist: https://gist.github.com/shvalb/ca9cd526aea31ccf280adf289e0991d7
答案 0 :(得分:0)
等待流结束; * InputStream.read()返回-1,或 *在调用endOfInput()
之前,Stream是关闭的())如果未返回EVENT_INCOMPLETE,请参阅此example,它还可选择停止输入输入。