gpt4 book ai didi

java - 为什么我的解码器要等到它具有以下开始元素才能使用 XMLStreamReader 返回?

转载 作者:行者123 更新时间:2023-11-29 09:15:50 25 4
gpt4 key购买 nike

我同时运行了 Python 脚本和 Java 测试。它们都试图做完全相同的事情——打开一个套接字,接收一个永无止境的 XML 流,并在接收到 XML 时对其进行解析。 Python 脚本使用 Expat,而 Java 测试使用 XMLStreamReader 和 Unmarshaller。

Python 脚本总是比 Java 测试先一步/对象,例如当我有足够的 XML 来解码一个对象时,Python 脚本会立即这样做,而 Java 解码程序只开始解码,并等待下一个 XML 开始标记的开始流入,然后返回之前解码的对象。如果我每隔 20 秒接收到 XML 对象,Java 解码器一定不会返回,直到接收到下一个对象。

  1. 收到 XML
  2. Python 和 Java 开始解码
  3. Python 立即返回
  4. 收到新的 XML
  5. Java 解码器返回
  6. 回到第2步

    XMLStreamReader reader = XMLInputFactory.newFactory().createXMLStreamReader(socket.getInputStream());

    while (reader.hasNext()) { //在这里解码——挂起直到下一个 XML 进来

XMLStreamReader 是 com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl

这个问题似乎也描述得相当好:http://java.net/jira/browse/JAXB-419

该问题中提到的 2.1.10 类似乎是:

最佳答案

解码器想要将“光标”放置到它已解码的部分的结束元素事件之后的事件。因此,它“挂起”直到有东西可用。来自 API 文档:

This method assumes that the parser is on a START_DOCUMENT or START_ELEMENT event. Unmarshalling will be done from this start event to the corresponding end event. If this method returns successfully, the reader will be pointing at the token right after the end event.

但是,任何 XML 事件都可以:也许您可以通过将 XML 注释插入到流中来做一些技巧...

关于java - 为什么我的解码器要等到它具有以下开始元素才能使用 XMLStreamReader 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com