清除ByteBuffer

非常简单的问题:我正在从一个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来检查之后是否有任何东西被添加到缓冲区,没有……?

我通过这段代码解决了同样的问题,希望它可以帮到你。

 channel1buf.clear(); //zerolize buff manually channel1buf.put(new byte[1024]); channel1buf.clear();