我试图通过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);
Run Code Online (Sandbox Code Playgroud)
其次是:
XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance()
.createXMLStreamReader(in);
//...
Run Code Online (Sandbox Code Playgroud)
当上面的代码与方法1一起使用时,它会在createXMLStreamReader行上阻塞.当使用方法2/3时,它们会立即抛出IllegalBlockingModeException(我明白为什么).也许需要一种新的方法?
我的目标是让一个非阻塞服务器select => accept来自客户端的字符数据=>使用特定的编码将其解析为XML事件=>将该事件对象转发到另一个线程进行处理=>并返回选择.
所以我忽略了一些东西,还是有更好的方法可以使用?如果是这样的话?
谢谢!