我正在尝试通过Java NIO通道接收一系列XML事件流。我对NIO和StAX解析都不熟悉,所以很可能会忽略一些东西 :)
我的搜索结果显示有几个SAX和StAX实现,但它们似乎都在InputStreams和InputSources上操作,而不是NIO通道。我做过的两次最接近的尝试是从通道中获取InputStream并创建PipedInputStream:
当使用方法1时,上述代码会在createXMLStreamReader行阻塞。当使用方法2/3时,它们立即抛出IllegalBlockingModeException异常(我明白为什么)。也许需要一种新的方法?
我的目标是拥有一个非阻塞服务器:选择= >接受来自客户端的字符数据 = >使用特定编码解析该数据到XML事件= >将该事件对象转发到另一个线程进行处理= >并返回到选择状态。
所以我是否忽略了某些东西,或者是否有更好的方法可用?如果有,那是什么?
谢谢!
我的搜索结果显示有几个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事件= >将该事件对象转发到另一个线程进行处理= >并返回到选择状态。
所以我是否忽略了某些东西,或者是否有更好的方法可用?如果有,那是什么?
谢谢!