簡體   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