ByteBuffer Little Endian插入不起作用

San*_*dor 20 java android bytebuffer endianness

我必须在遗留系统和Android设备之间进行双向通信.遗留系统使用小端字节排序.我已经成功实现了接收部分,但发送不起作用.

奇怪,因为对我来说,似乎ByteBuffer类出现故障(我简直不敢相信)

    ByteBuffer byteBuffer = ByteBuffer.allocate(4);
    byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
    byteBuffer = ByteBuffer.allocate(4);
    byteBuffer.putInt(88);
    byte[] result = byteBuffer.array();
Run Code Online (Sandbox Code Playgroud)

结果:[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();
Run Code Online (Sandbox Code Playgroud)

结果相同:[0,0,0,88]

但是,如果我没有弄错,小端序排序应该返回:[88,0,0,0]

那么我错过了什么呢?

Per*_*ion 32

出于某些奇怪的原因,您将重新初始化字节缓冲区并丢弃先前的副本,而这些副本已更改了字节顺序.以下代码对我来说很好用:

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

打印[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));
Run Code Online (Sandbox Code Playgroud)

打印[88,0,0,0]

  • 我无法相信,但我没有看到它.第二次初始化不是故意的.我需要睡个好觉.不管怎么说,还是要谢谢你, (3认同)