首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bytebuffer.flip()和bytebuffer.rewind()之间的区别

bytebuffer.flip()和bytebuffer.rewind()之间的区别
EN

Stack Overflow用户
提问于 2013-05-09 20:00:38
回答 5查看 18.6K关注 0票数 28

我知道flip()将当前缓冲区位置设置为0,并将限制设置为前一个缓冲区位置,而rewind()仅将当前缓冲区位置设置为0。

在下面的代码中,我使用rewind()或flip()得到相同的结果。

代码语言:javascript
运行
复制
byte b = 127;
bb.put(b);
bb.rewind();//or flip();

System.out.println(bb.get());
bb.rewind();// or flip();
System.out.println(bb.get());

你能为我提供一个真实的例子,说明这两种方法的区别是否真正重要?提前谢谢。

EN

回答 5

Stack Overflow用户

发布于 2017-07-04 20:15:22

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

代码语言:javascript
运行
复制
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,如下所示:

代码语言:javascript
运行
复制
    [ 1  1  1  1  0  0  0  0]
               |           |
flip           limit       |
rewind                     limit

所以rewind刚刚使用的limit已经做了适当设置。

票数 19
EN

Stack Overflow用户

发布于 2013-05-09 20:33:21

它们根本不是等价的。

ByteBuffer通常已为read() (或put())做好准备。

flip()write() (或get())做好了准备。

rewind()compact()clear()使其在write() (或get())之后再次为read()/put()做好了准备。

票数 17
EN

Stack Overflow用户

发布于 2016-02-21 15:51:42

rewind( )方法类似于flip( ),但不影响限制。它只会将位置设置回0。您可以使用rewind( )返回并重新读取已翻转的缓冲区中的数据。一种常见的情况是:在您使用flip()之后,您从缓冲区读取数据,如果您想要重新读取数据,则此方法将起作用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16461284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档