是否有针对Java的基于推送/非阻塞的XML解析器?

Mic*_*ker 17 java xml nonblocking

我正在寻找一种XML解析器,而不是从InputStream或InputSource解析,而是允许将文本块推送到解析器中.例如,我希望得到以下内容:

public class DataReceiver {
    private SAXParser parser = //...
    private DefaultHandler handler = //...

    /**
     * Called each time some data is received.
     */
    public void onDataReceived(byte[] data) {
        parser.push(data, handler);
    }
}
Run Code Online (Sandbox Code Playgroud)

原因是我想要一些能够与NIO网络库一起使用的东西,而不是必须恢复到支持阻塞InputStream所需的每个连接模型的线程.

Sta*_*Man 7

令人惊讶的是,没有人提到过一个实现非阻塞("异步")解析的Java XML解析器:Aalto.部分原因可能是缺乏文档(及其活动水平较低).Aalto实现了基本的Stax API,但也允许推送输入的小扩展(这部分尚未最终确定;功能存在但API尚未最终确定).有关更多信息,您可以查看相关的讨论组.


Har*_*son 3

这是来自 Xerces J-Users 邮件列表的帖子(2009 年 4 月),原始发帖者也有完全相同的问题。“Jeff”给出了一个可能非常好的回应,但没有对原始发帖人的回应进行后续跟进:

http://www.nabble.com/parsing-an-xml-document-chunk-by-chunk-td22945319.html

它可能足够新,可以出现在列表中,或者至少有助于搜索。

编辑

找到了另一个有用的链接,提到了一个名为 Woodstox 的库,并描述了 Stream 与基于 NIO 的解析器的状态以及模拟流的一些可能的方法:

http://markmail.org/message/ogqqcj7dt3lwkbov