我是 Java ByteBuffers 的新手,想知道翻转后写入 ByteBuffer 的正确方法是什么。
在我的用例中,我将一个输出缓冲区写入套接字:
outBuffer.flip();
//Non-blocking SocketChannel
int bytesWritten = getSocket().write(outBuffer);
此后,必须再次写入输出缓冲区。此外,并非 outBuffer 中的所有字节都已写入套接字。
由于它当前已翻转,如果数据仍在缓冲区中且未写入套接字,如何才能使其再次可写,而不覆盖任何数据?
如果我是对的, outBuffer.position() == bytesWritten 和限制应该是要写入的数据量。
那么使用以下内容来重用输出缓冲区是否正确? :
int limit = outBuffer.limit()
outBuffer.limit(outBuffer.capacity());
outBuffer.position(limit);
Again从 API 规范:以下循环通过缓冲区 buf 将字节从一个通道复制到另一个通道:
while (in.read(buf) >= 0 || buf.position != 0) {
buf.flip();
out.write(buf);
buf.compact(); // In case of partial write
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)