Java NIO チャネルを介して XML イベントのストリームを受信しようとしています。私はNIOとStAXの両方の解析に慣れていないので、何かを見落としがちです:)
検索の結果、いくつかの SAX および StAX の実装にたどり着きましたが、それらはすべて、NIO チャネルではなく、InputStreams および InputSources で動作するようです。私が行った 2 つの最も近い試みは、チャネルから 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イベントに解析する=>そのイベントオブジェクトを別のスレッドに転送して処理する=>選択に戻ることです。
だから私は何かを見落としていますか、それとも使用できるより良いアプローチがありますか? もしそうなら何?
ありがとう!