非常に単純な問題:私は1つのSocketChannelから読み込み、別のSocketChannelに結果を書きたいと思います。 Selectorオブジェクトを使用しているので、1つのSocketChannelが読み込み可能になるまで待機し、ByteBufferにデータをダンプし、次のSocketChannelが書き込み可能になると、そこにByteBufferをダンプします。これまでOK。しかし、ByteBufferを実際にクリアする方法はないので、新しいデータがいつ到着したかを知るためのチェックを行うことはできません。ByteBufferのクリア
私は.clear()メソッドを試してみたが、それは明らかにバッファをクリアしませんが、これがあればちょうど私と一緒にその裸Javaで私は決してプログラム1.
にバッファ位置をリセット
ByteBuffer channel1buf = ByteBuffer.allocate(1024);
ByteBuffer channel2buf = ByteBuffer.allocate(1024);
if (key.isReadable()) {
if (key.channel().equals(channel1)) {
channel1.read(channel2buf);
} else if (key.channel().equals(channel2)) {
channel2.read(channel1buf);
}
} else if (key.isWritable()) {
if (key.channel().equals(channel1) && channel1buf.asCharBuffer().length() > 0) {
channel1.write(channel1buf);
/* some way to clear channel1buf */
} else /* same idea for channel2... */
}
ありがとう: "明白な" 解決策の問題...
はここにいくつかのサンプルコードです!
。 – mike