我是Java ByteBuffer的新手,想知道在翻转后写入ByteBuffer的正确方法是什么。

在我的用例中,我正在将outputBuffer写入套接字:

    outBuffer.flip();
    //Non-blocking SocketChannel
    int bytesWritten = getSocket().write(outBuffer);


此后,必须再次写入输出缓冲区。同样,并非outBuffer中的所有字节都可能已写入套接字。

由于当前已被翻转,如果它仍然在缓冲区中并且没有被写入套接字,如何在不覆盖任何数据的情况下再次使其可写?

如果我是对的,则outBuffer.position()== bytesWrited,限制应该是要写入多少数据。

那么使用以下命令重用输出缓冲区是否正确? :

   int limit = outBuffer.limit()
   outBuffer.limit(outBuffer.capacity());
   outBuffer.position(limit);

最佳答案

同样来自API规范:
以下循环通过缓冲区buf将字节从一个通道复制到另一个通道:

while (in.read(buf) >= 0 || buf.position != 0) {
   buf.flip();
   out.write(buf);
   buf.compact();    // In case of partial write
}

10-04 20:56