使用ByteBuffer在Java中复制字节字符串

时间:2015-10-11 00:06:16

标签: java bytearray bytebuffer

我正在尝试复制我在Objective-C(在iOS上)用Java生成的字节字符串但是遇到了麻烦。这是我想要制作的字符串:

"\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

我从4个整数的数组中获取该字符串 - [1,1,0,0] - 其中每个整数有4个字节。在这里查看了一堆问题后,我尝试使用ByteBuffer在Java中构建该字符串,如下所示:

ByteBuffer bytes = ByteBuffer.allocate(16);
bytes.putInt(1);
bytes.putInt(1);
bytes.putInt(0);
bytes.putInt(0);

String byteString = new String(bytes.array());

然而,这给了我:

"\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"

当我解压缩时,我获得的整数数组是[16777216, 16777216, 0, 0]。显然我做错了,我希望有人能指出我正确的方向。

2 个答案:

答案 0 :(得分:5)

iOS是little-endian,因此首先是4字节整数的最低有效字节。

Java ByteBuffer defaults to big-endian,因此恰恰相反。

  

字节缓冲区的初始顺序始终为BIG_ENDIAN

您可以使用

更改此设置
bytes.order(ByteOrder.LITTLE_ENDIAN);

答案 1 :(得分:0)

你想要的是:

ByteBuffer bytes = ByteBuffer.allocate(16);
bytes.putInt(16777216);
bytes.putInt(16777216);
bytes.putInt(0);
bytes.putInt(0);

String byteString = new String(bytes.array());

平台的字节顺序不同,所以当你输入4个字节时,字节就会反转。