首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteBuffer.flip()问题

ByteBuffer.flip()问题
EN

Stack Overflow用户
提问于 2013-06-01 14:33:30
回答 1查看 637关注 0票数 0

我有一个如下的类:

代码语言:javascript
复制
final ByteBuffer data;

1st_constructor(arg1, arg2, arg3){
    data = ByteBuffer.allocate(8);   
    // Use "put" method to add values to the ByteBuffer
    //.... eg: 2 ints
    //....
    data.flip();
}

1st_constructor(arg1, arg2){
    data = ByteBuffer.allocate(12);  
    // Use "put" method to add values to the ByteBuffer
    //.... eg: 3 ints
    //....  
    data.flip()
}

在我的主类中,我创建了一个名为"data_packet“的类的实例,并将数据”ByteBuffer“的内容存储到一个byte[]中。

代码语言:javascript
复制
data_packet.data.get(buf,0,buf.length);

随后,当我使用:

代码语言:javascript
复制
data_packet.data.getInt();

我得到了一个"BufferUnderFlow异常“。但是,如果我在使用getInt()之前再次翻转缓冲区,它工作得很好。

所以我的问题是,为什么我需要再次翻转缓冲区?它不是已经设置为在构造函数中读取了吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-06-01 14:39:44

flip用于将ByteBuffer从“读”( put )翻转为“写”( set ):在使用一系列put填充ByteBuffer后,flip会将缓冲区的限制设置为当前位置,并将位置重置为零。这样做的效果是让将来的get或write从缓冲区写入所有放入缓冲区的内容,仅此而已。

在完成put之后,您可能希望重用ByteBuffer来构造另一个数据结构。要“取消翻转”它,请调用reset。这将重置对容量的限制(使所有缓冲区可用),并将位置设置为0。

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

https://stackoverflow.com/questions/16869856

复制
相关文章

相似问题

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