Тестирование сценариев LITTLE_ENDIAN и BIG_ENDIAN - PullRequest
0 голосов
/ 20 февраля 2019

Если у меня есть сценарий, в котором мне нужно по-разному обрабатывать 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) просто меняет порядок в байтовом буфере, но не в системе, верно?

1 Ответ

0 голосов
/ 20 февраля 2019

Использование ByteBuffer.У него есть метод order(ByteOrder bo):

Изменяет порядок байтов этого буфера.

Параметры:
bo - Theновый порядок байтов, либо BIG_ENDIAN или LITTLE_ENDIAN

Обратите внимание, что Javadoc ByteBuffer говорит:

Первоначальный порядок байтового буфера всегда 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]
...