我正在尝试通过 Java NIO 通道接收 XML 事件流。我对 NIO 和 StAX 解析都是新手,所以我很容易忽略一些东西:)
我的搜索使我找到了几个 SAX 和 StAX 实现,但它们似乎都在 InputStreams 和 InputSources 上运行,而不是 NIO 通道。我做过的两个最接近的尝试是从通道中获取 InputStream 并创建一个 PipedInputStream:
// method 1
PipedOutputStream out = new PipedOutputStream();
InputStream in = new PipedInputStream(out);
PrintWriter writer = new PrintWriter(out);
//method 2
InputStream in = channel.socket().getInputStream()
//method 3
IputStream in = Channels.newInputStream(channel);
其次是:
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance()
.createXMLStreamReader(in);
//...
当上面的代码与方法 1 一起使用时,它会阻塞在 createXMLStreamReader 行上。当使用方法 2/3 时,它们会立即抛出 IllegalBlockingModeException(我明白为什么)。也许需要一种新方法?
我的目标是让非阻塞服务器选择 => 接受来自客户端的字符数据 => 使用特定编码将其解析为 XML 事件 => 将该事件对象转发到另一个线程进行处理 => 并返回到选择。
那么我是否忽略了某些东西,还是有更好的方法可以使用?如果是这样呢?
谢谢!