2011-06-16 52 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 
相关问题