为什么ByteBuffer的flip()方法叫“flip”?这里“翻转”了什么?根据 apidoc,连续两次翻转不会恢复原始状态,并且多次翻转可能会使 limit()
趋于为零。
我可以以某种方式“取消翻转”以重用超出限制的字节吗?
我可以将尾部与其他一些数据连接起来吗?
最佳答案
ByteBuffer
的一个相当常见的用例是逐个构造一些数据结构,然后将整个结构写入磁盘。 flip
用于将 ByteBuffer
从“从 I/O 读取”(put
ting)翻转到“写入 I/O”(get
ting):在使用一系列 put
填充 ByteBuffer
后,flip
会设置缓冲区到当前位置并将位置重置为零。这具有使缓冲区中的 future get
或 write
将所有 put
的所有内容写入缓冲区而不是更多的效果。
在完成 put
之后,您可能希望重用 ByteBuffer
来构造另一个数据结构。要“取消翻转”它,请调用 clear
。这会将限制重置为容量(使所有缓冲区都可用),并将位置重置为 0。
那么,一个典型的使用场景:
ByteBuffer b = new ByteBuffer(1024);
for(int i=0; i<N; i++) {
b.clear();
b.put(header[i]);
b.put(data[i]);
b.flip();
out.write(b);
}
关于java - ByteBuffer翻转方法的目的是什么? (为什么它被称为 "flip"?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792968/