2013-07-03 56 views
5

好吧,所以我一直在尋找什麼是最好的方法來從字節數組轉換爲它的數值在Java中,我碰到這個link。第二個答案提到了使用ByteBuffer類。對於那些不希望點擊鏈接的人來說,最初的問題是問我是否有:如何在Java中使用ByteBuffer的Wrap方法

byte[] by = new byte[8]; 

如何將其轉換爲int?那麼這個答案...

ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4}); 
long l = bb.getLong(); 

System.out.println(l); 

結果

4 

這是真棒學習,但我只是想確認一下才去這條路線的東西。

假設我有一個以前讀取長度爲8個字節的字節數組。

byte[] oldByte = new byte[8]; 

然後我做...

ByteBuffer bb = ByteBuffer.wrap(new byte[] {oldByte[2], oldByte[3]}); 
int intValue = bb.getInt(); 

會的工作/以同樣的方式與前面的例子看?

+0

您將得到一個java.nio.BufferUnderflowException,因爲您需要4個字節來獲得一個int,但是您只是給出一個int ByteBuffer 2個字節。 – Brinnis

回答

6

documentationByteBuffer類指定的getInt()方法讀取下一個4個字節,所以如果你只有經過兩個字節來調用wrap,你會得到一個BufferUnderflowException

拋出:BufferUnderflowException - 如果此緩衝區中剩餘的字節數少於4個字節

+0

所以你說它應該是:'ByteBuffer bb = ByteBuffer.wrap(new byte [] {0,0,oldByte [2],oldByte [3]});'? –

+1

@ ThisOnePr0grammer是的,根據文檔默認的字節順序是大端,所以看起來是正確的。 – andersschuller