0

我正在尝试在异步环境中设置 Aalto-xml (Woodstox),但在弄清楚如何正确执行时遇到了麻烦!

我的流程是:

  1. 预分配“AsyncStreamReader”

    xmlInputFactory.createAsyncForByteArray();

  2. 从套接字接收 XML 流

  3. 使用数据馈送 streamReader

    streamReader.getInputFeeder().feedInput(bytes, 0, bufSize);

  4. 循环解析不同的 XML 标签:

    while (streamReader.hasNext()) {...}

  5. LastXMLEvent.END_ELEMENT被解析 --> 调用:

    streamReader.getInputFeeder().endOfInput();

  6. 执行后XMLEvent.END_DOCUMENT

    streamReader = xmlInputFactory.createAsyncForByteArray();

  7. AsyncXMLStreamReader.EVENT_INCOMPLETE--> 打破循环并等待更多数据提供给解析器。

尽管我知道这是错误的,但我还是这样做了,因为如果我不调用:'endOfInput()',那么当向阅读器提供新缓冲区时,它会抛出一个异常,就像我没有完成之前的 xml 一样。

让我失望的一点是,为了获得 END_DOCUMENT 你必须调用endOfInput()它来关闭缓冲区,这样你就不能用来自套接字的更多输入来提供它......我在这里陷入了一个循环!

如何修复我的流量?

这是带有解析器代码的要点: https ://gist.github.com/shvalb/ca9cd526aea31ccf280adf289e0991d7

4

1 回答 1

0

等待流结束;* InputStream.read() 返回 -1,或 * 在调用 endOfInput() 之前 Stream is closed())

请参阅此示例,如果未返回 EVENT_INCOMPLETE,它还可以选择停止输入输入。

于 2017-01-19T15:49:40.767 回答