ByteBuffer.flip()问题

时间:2013-06-01 06:33:30

标签: java flip bytebuffer

我有一个课程如下:

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()之前再次翻转缓冲区,它可以正常工作。

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

谢谢。

1 个答案:

答案 0 :(得分:0)

flip用于将ByteBuffer从“read”(put)翻转到“write”(获取):在使用put序列填充ByteBuffer之后,flip将缓冲区的限制设置为当前位置,将位置重置为零。这样可以使将来从缓冲区中获取或写入所有放入缓冲区的内容,而不再是。

完成put之后,您可能希望重用ByteBuffer来构造另一个数据结构。要“解开”它,请调用重置。这会重置容量限制(使所有缓冲区都可用),并将位置重置为0。