我是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
}