我知道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());你能为我提供一个真实的例子,说明这两种方法的区别是否真正重要?提前谢谢。
发布于 2017-07-04 20:15:22
从源代码来看,它们非常相似。您可以看到以下内容:
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刚刚使用的limit已经做了适当设置。
发布于 2013-05-09 20:33:21
它们根本不是等价的。
ByteBuffer通常已为read() (或put())做好准备。
flip()为write() (或get())做好了准备。
rewind()、compact()和clear()使其在write() (或get())之后再次为read()/put()做好了准备。
发布于 2016-02-21 15:51:42
rewind( )方法类似于flip( ),但不影响限制。它只会将位置设置回0。您可以使用rewind( )返回并重新读取已翻转的缓冲区中的数据。一种常见的情况是:在您使用flip()之后,您从缓冲区读取数据,如果您想要重新读取数据,则此方法将起作用。
https://stackoverflow.com/questions/16461284
复制相似问题