2013-12-21 46 views
3

非常小的一段代碼,但我對此行爲完全感到驚訝。我有一個14字節的鍵在字節數組中。我把這個字節數組放到一個ByteBuffer中,然後做一個getLong給了我一個BufferUnderflowException。不明白爲什麼?BufferUnderflowException在分配緩衝區時執行getLong時發生異常14字節

byte key[] = new byte[14]; 

    key[13] = (byte) 3; 
    key[12] = (byte) 21; 
    key[11] = (byte) 1; 
    key[10] = (byte) 15; 
    key[9] = (byte) 66; 
    key[8] = (byte) 64; 

    key[7] = (byte) 3; 
    key[6] = (byte) 65; 
    key[5] = (byte) -10; 
    key[4] = (byte) -65; 
    key[3] = (byte) 3; 
    key[2] = (byte) 65; 
    key[1] = (byte) -10; 
    key[0] = (byte) -65; 


    ByteBuffer b = ByteBuffer.allocate(14); 
    b.put(key); 
    long l = b.getLong(); 

回答

1

在「put」的文檔中,闡明瞭其他字節緩衝區的方法,即緩衝區的位置增加了put個字節的數量。這對於字節數組似乎是一樣的。因此,在put操作之後,緩衝區中的位置爲14,剩餘0字節以獲得需要8個字節的長整型值。的「放」

Java文檔「 [...]這兩個緩衝區的位置,然後遞增n [...]」

+0

所以我需要倒帶? – sethi

+0

是的,這個假設是正確的 –

3
ByteBuffer b = ByteBuffer.allocate(14); 
b.put(key, 0, key.length); 
long l = b.getLong(0); 

你應該必須在獲取指定索引長

相關問題