Я пытаюсь дублировать байт String, который я создаю в Objective-C (на iOS) в Java, но у меня проблемы. Вот строка, я хочу, чтобы произвести:Проблема, повторяющая байтовую строку в Java с ByteBuffer
"\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
Я получаю эту строку из массива 4 целых чисел - [1,1,0,0]
- где каждое целое число имеет 4 байта. Посмотрев на кучу вопросов, на здесь, я пытался строить эту строку в Java с помощью ByteBuffer
следующим образом:
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"
Когда я распаковывать, что, массив ints я получаю [16777216, 16777216, 0, 0]
. Очевидно, я делаю что-то неправильно, и я надеюсь, что кто-то может указать мне в правильном направлении.
Использование строки для хранения байт не рекомендуется. Когда вы передаете массив байтов в [new String] (https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#String-byte:A-), вы используете платформу по умолчанию для декодирования этих байтов в символы, и любые последовательности байтов, которые являются недопустимыми для этой кодировки, будут декодированы в String как «?» или " ". Эти конкретные байты не имеют этой проблемы, но, возможно, все байты выше 0x7f. – VGR