使用Aalto-xml强制为每个XML创建新缓冲区

时间:2016-07-29 14:50:06

标签: java xml-parsing stax woodstox

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

我的流程是:

  1. 预先分配'AsyncStreamReader'

    xmlInputFactory.createAsyncForByteArray();

  2. 从套接字

  3. 接收XML流
  4. 使用数据

    输入streamReader

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

  5. 在循环中解析不同的XML标记:

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

  6. 解析最后XMLEvent.END_ELEMENT时 - >调用

    streamReader.getInputFeeder().endOfInput();

  7. XMLEvent.END_DOCUMENT执行:

    streamReader = xmlInputFactory.createAsyncForByteArray();

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

  9. 我这样做虽然我知道这是错的,因为如果我不打电话: 'endOfInput()'然后在为读者提供新的缓冲区时,会抛出一个异常,就像我没有使用前面的xml一样。

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

    如何修复流量?

    这是一个包含解析器代码的Gist: https://gist.github.com/shvalb/ca9cd526aea31ccf280adf289e0991d7

1 个答案:

答案 0 :(得分:0)

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

之前,Stream是关闭的())

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