我知道,flip()将当前缓冲区位置设置为0,并将限制设置为先前的缓冲区位置,而rewind()只是将当前缓冲区位置设置为0。
在下面的代码中,我使用rewind()或flip()都会得到相同的结果。

byte b = 127;
bb.put(b);
bb.rewind();//or flip();

System.out.println(bb.get());
bb.rewind();// or flip();
System.out.println(bb.get());
您能否提供一个真实的例子,说明这两种方法之间的差异确实很重要?提前致谢。

最佳答案

从源代码来看,它们非常相似。您可以看到以下内容:

public final Buffer flip() {
    limit = position;
    position = 0;
    mark = -1;
    return this;
}

public final Buffer rewind() {
    position = 0;
    mark = -1;
    return this;
}

所以区别是fliplimit设置为position,而rewind则没有。
假设您已分配了一个8字节的缓冲区,已用4个字节填充了缓冲区,然后将位置设置为3,如下所示:
    [ 1  1  1  1  0  0  0  0]
               |           |
flip           limit       |
rewind                     limit

因此,刚刚使用的rewind限制已适当设置。

10-08 13:20