java - ByteBuffer翻转方法的目的是什么? (为什么它被称为 "flip"?)

标签 java flip bytebuffer

为什么ByteBuffer的flip()方法叫“flip”?这里“翻转”了什么?根据 apidoc,连续两次翻转不会恢复原始状态,并且多次翻转可能会使 limit() 趋于为零。

我可以以某种方式“取消翻转”以重用超出限制的字节吗?

我可以将尾部与其他一些数据连接起来吗?

最佳答案

ByteBuffer 的一个相当常见的用例是逐个构造一些数据结构,然后将整个结构写入磁盘。 flip 用于将 ByteBuffer 从“从 I/O 读取”(putting)翻转到“写入 I/O”(getting):在使用一系列 put 填充 ByteBuffer 后,flip 会设置缓冲区到当前位置并将位置重置为零。这具有使缓冲区中的 future getwrite 将所有 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/

相关文章:

Java NIO MappedByteBuffer 内存溢出异常

c# - 在我的 C# 应用程序中。我正在将远程机器的 CNC 程序读入字节缓冲区。如何将这个字节缓冲区逐行读取到字符串数组中?

Java:将 TRUE/FALSE 的所有可能组合添加到列表中

css - 具有位置属性的内部元素时翻转动画被破坏

javascript - Kendo UI 翻转效果在 Internet Explorer 中显示得太快

gwt - GWT 中的 ByteBuffer 到 String

java - 使用一个或多个随机数生成器进行遗传算法?

java - Tomcat 7 - HTTPOnly - 错误的 Set-Cookie header - 未找到 token '='

java - 如何对第一行以java中的模式开头的所有行进行分组

Android Flip Animation 从周围增长淡入,向周围收缩淡出?