测试LITTLE_ENDIAN和BIG_ENDIAN场景

问题描述 投票:0回答:1

如果我有一个场景,我需要以不同的方式处理LITTLE_ENDIANBIG_ENDIAN案例,如果我的系统使用BIG_ENDIAN,如何测试LITTLE_ENDIAN案例?当系统的ByteOrder.nativeOrder()。equals(ByteOrder.LITTLE_ENDIAN)时,如何测试ByteOrder.nativeOrder()。equals(ByteOrder.BIG_ENDIAN)的情况?因为byteBuffer .order(ByteOrder.BIG_ENDIAN)只是改变了bytebuffer的顺序,而不是系统权利?

java nio endianness
1个回答
1
投票

使用ByteBuffer。它有方法order(ByteOrder bo)

修改此缓冲区的字节顺序。

参数: bo - 新的字节顺序,BIG_ENDIANLITTLE_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]
© www.soinside.com 2019 - 2024. All rights reserved.