【发布时间】:2015-10-11 00:06:15
【问题描述】:
我正在尝试在 Java 中复制我在 Objective-C(在 iOS 上)中生成的字节字符串,但遇到了麻烦。这是我要生成的字符串:
"\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]。显然我做错了什么,我希望有人能指出我正确的方向。
【问题讨论】:
-
不建议使用字符串来保存字节。当您将字节数组传递给new String 时,您正在使用平台的默认字符集将这些字节解码为字符,并且对于该字符集无效的任何字节序列都将被解码为字符串“?”或“�”。这些特定字节没有这个问题,但任何高于 0x7f 的字节都可能会。
标签: java bytearray bytebuffer