如果我有需要以不同的方式处理LITTLE_ENDIAN
和BIG_ENDIAN
案例的情况,如果我的系统使用BIG_ENDIAN
,如何测试LITTLE_ENDIAN
案例?当系统的ByteOrder.nativeOrder()。equals(ByteOrder.LITTLE_ENDIAN)时,如何测试ByteOrder.nativeOrder()。equals(ByteOrder.BIG_ENDIAN)的情况?因为byteBuffer .order(ByteOrder.BIG_ENDIAN)只是在改变字节缓冲区的顺序,而不是系统,对吗?
最佳答案
使用ByteBuffer
。它具有方法order(ByteOrder bo)
:
修改此缓冲区的字节顺序。
参数:
bo
-新的字节顺序,BIG_ENDIAN
或LITTLE_ENDIAN
请注意,ByteBuffer
的javadoc表示:
字节缓冲区的初始顺序始终为BIG_ENDIAN
。
例
int value = 123456789;
byte[] bigEndian = ByteBuffer.allocate(Integer.BYTES)
.order(ByteOrder.BIG_ENDIAN)
.putInt(value)
.array();
byte[] littleEndian = ByteBuffer.allocate(Integer.BYTES)
.order(ByteOrder.LITTLE_ENDIAN)
.putInt(value)
.array();
System.out.printf("value = 0x%08x = %d%n", value, value);
System.out.println(Arrays.toString(bigEndian));
System.out.println(Arrays.toString(littleEndian));
输出量
value = 0x075bcd15 = 123456789
[7, 91, -51, 21]
[21, -51, 91, 7]
关于java - 测试LITTLE_ENDIAN和BIG_ENDIAN方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54775950/