ByteBuffer Вставка Little Endian не работает

Я должен сделать двустороннюю связь между унаследованной системой и устройством Android. Унаследованная система использует небольшие порядковые байты. Я успешно выполнил приемную часть, однако отправка не работает.

Странно, потому что для меня кажется, что класс ByteBuffer неисправен (я с трудом могу в это поверить)

ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer = ByteBuffer.allocate(4); byteBuffer.putInt(88); byte[] result = byteBuffer.array(); 

Результаты: [0, 0, 0, 88]

  ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.BIG_ENDIAN); byteBuffer = ByteBuffer.allocate(4); byteBuffer.putInt(88); byte[] result = byteBuffer.array(); 

Также результаты аналогичны: [0, 0, 0, 88]

Однако, если я не ошибаюсь, следует вернуться к порядку: [88, 0, 0, 0]

Так в чем же смысл?

Solutions Collecting From Web of "ByteBuffer Вставка Little Endian не работает"

По какой-то странной причине вы повторно инициализируете свои байт-буферы и выбрасываете предыдущие копии, где вы изменили порядковый номер. Следующий код работает отлично для меня:

 ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.BIG_ENDIAN); byteBuffer.putInt(88); byte[] result = byteBuffer.array(); System.out.println(Arrays.toString(result)); 

Печать [0, 0, 0, 88]

 ByteBuffer byteBuffer = ByteBuffer.allocate(4); byteBuffer.order(ByteOrder.LITTLE_ENDIAN); byteBuffer.putInt(88); byte[] result = byteBuffer.array(); System.out.println(Arrays.toString(result)); 

Печать [88, 0, 0, 0]

По соответствующей заметке:

Этот код:

  int unicodePointsLen = textContent.length() * 2; ByteBuffer unicodePointsBuffer = ByteBuffer.allocateDirect(unicodePointsLen); short unicodePointValue; for (int i = 0; i < textContent.length(); i++) { unicodePointValue = (short)textContent.charAt(i); unicodePointsBuffer.put((byte)(unicodePointValue & 0x00FF)).put((byte)(unicodePointValue >> 8)); } 

Это примерно на 25% быстрее:

  int unicodePointsLen = textContent.length() * 2; ByteBuffer unicodePointsBuffer = ByteBuffer.allocateDirect(unicodePointsLen); unicodePointsBuffer.order(ByteOrder.LITTLE_ENDIAN); for (int i = 0; i < textContent.length(); i++) { unicodePointsBuffer.putShort((short)textContent.charAt(i)); } 

Использование JDK 1.8.

Я пытаюсь передать юникодные точки от JAVA до C ++ через JNI, и первый метод является самым быстрым, что я нашел. Любопытно, что это быстрее, чем второй фрагмент.