java - 清除一个 ByteBuffer

标签 java

非常简单的问题:我正在从一个 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/

相关文章:

java - 如何处理jasmin中名为关键字的字段

java - 3d 数组使用 Java.util.Scanner.nextInt() 将 null 作为输入

java - 如何将此 api 结果更改为 Jtable 格式?

java - 模拟器上的 "Fatal Exception: main"和 "Google Play services out of date"

java - 奇怪的字符串不会分割(空格或制表符)

java - 我只想在java swing平台的文本字段中只取字母、退格键、删除键和空格

java - 多个参数在 Java 中对我不起作用

java - 如何序列化包含 LAZY 关联的 json

java - 如何使用java获取特定线程的CPU内存消耗?

JavaFX Accordion 效果