【问题标题】:Using Aalto-xml forces to create new buffer for each XML使用 Aalto-xml 强制为每个 XML 创建新缓冲区
【发布时间】:2016-12-04 08:13:41
【问题描述】:

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

我的流程是:

  1. 预分配“AsyncStreamReader”

    xmlInputFactory.createAsyncForByteArray();

  2. 从套接字接收 XML 流

  3. 为流读取器提供数据

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

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

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

  5. 在最后一次 XMLEvent.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

【问题讨论】:

    标签: java xml-parsing stax woodstox


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 2016-11-29
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多