[英]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.