我知道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
复制相似问题