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

tva*_*nt2 1 java bytebuffer bytearray

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

"\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
Run Code Online (Sandbox Code Playgroud)

我从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());
Run Code Online (Sandbox Code Playgroud)

然而,这给了我:

"\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
Run Code Online (Sandbox Code Playgroud)

当我解压缩时,我得到的是一系列的[16777216, 16777216, 0, 0].显然我做错了,我希望有人可以指出我正确的方向.

Cup*_*Tae 5

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

Java ByteBuffer 默认为big-endian,因此相反.

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

你可以改变它

bytes.order(ByteOrder.LITTLE_ENDIAN);
Run Code Online (Sandbox Code Playgroud)