2011-06-16 80 views

回答

5

代碼:

public static void main(String[] args) { 
    ByteBuffer bb = ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }); 
    System.out.println(bb.order()); 
    System.out.println(bb.getInt() == 222); 
    bb.rewind(); 
    bb.order(ByteOrder.LITTLE_ENDIAN); 
    System.out.println(bb.order()); 
    System.out.println(bb.getInt() == -570425344); 
} 

控制檯:

BIG_ENDIAN 
true 
LITTLE_ENDIAN 
true 

附錄:作爲參考, 「新創建的字節緩衝器的順序總是BIG_ENDIAN」 - ByteBuffer#order()

+0

編輯以反映@ Mac的有用評論。 – trashgod 2011-06-16 02:59:32

+0

對不起,你是對的,我並不瞭解ByteBuffer默認總是以big endian順序存儲字節,而不是底層平臺的字節序。我正在使用英特爾(LE),所以我正在扭轉它。 – 2011-06-16 03:04:10

+0

好點;我已添加以上鍊接供參考。 – trashgod 2011-06-16 03:16:33

3

結果你觀察到的是一個小端機器是正確的。我懷疑如果你運行以下,你會得到LITTLE_ENDIAN作爲答案。

ByteBuffer bb = ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }); 
System.out.println(bb.order()); 

如果要強制大端排序爲您的緩衝區,請執行以下操作:

ByteBuffer bb = ByteBuffer.wrap(new byte[] { 0, 0, 0, -34 }); 
bb.order(ByteOrder.BIG_ENDIAN); 
System.out.println(bb.order()); 
System.out.println(bb.getInt()); 

應該打印出來:

BIG_ENDIAN 
222 
相關問題