繁体   English   中英

ByteBuffer.flip()问题

[英]ByteBuffer.flip() Issue

我的课如下:

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“ data”的内容存储到byte []中。

data_packet.data.get(buf,0,buf.length);

随后,当我使用时:

data_packet.data.getInt();

我收到“ BufferUnderFlow异常”。 但是,如果在使用getInt()之前再次翻转缓冲区,它会正常工作。

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

谢谢。

flip用于将ByteBuffer从“读取”(放置)翻转到“ write”(获取):使用一系列put填充ByteBuffer后,flip会将缓冲区的限制设置为当前位置并重置该位置归零。 这具有使将来从缓冲区进行获取或写入的作用,而不必再写入缓冲区中的所有内容。

完成放置后,您可能需要重用ByteBuffer来构造另一个数据结构。 要“翻转”它,请调用reset。 这会将限制重置为容量(使所有缓冲区可用),并将位置重置为0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM