我知道,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;
}
所以区别是
flip
将limit
设置为position
,而rewind
则没有。假设您已分配了一个8字节的缓冲区,已用4个字节填充了缓冲区,然后将位置设置为3,如下所示:
[ 1 1 1 1 0 0 0 0]
| |
flip limit |
rewind limit
因此,刚刚使用的
rewind
限制已适当设置。