非常简单的问题:我正在从一个 SocketChannel 读取数据,并想将结果写入另一个 SocketChannel。我正在使用一个 Selector 对象,所以我等到一个 SocketChannel 可读,将数据转储到 ByteBuffer,然后当下一个 SocketChannel 可写时,我将 ByteBuffer 转储到那里。好的到目前为止。但是,似乎没有任何方法可以实际“清除”ByteBuffer,因此我无法进行任何类型的检查以了解新数据何时到达。
我试过 .clear() 方法,但显然不会清除缓冲区,只是将缓冲区位置重置为 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... */
}
最佳答案
Buffer.clear
重置位置,是的,然后你可以使用 getPosition() > 0
检查之后是否有任何东西被添加到缓冲区,没有......?
关于java - 清除一个 ByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507963/