В настоящее время я разрабатываю приложение, в котором пользователи могут редактировать ByteBuffer через интерфейс шестнадцатеричного редактора, а также редактировать соответствующий текст через JTextPane. Моя текущая проблема заключается в том, что для JTextPane требуется строка, мне нужно преобразовать ByteBuffer в String перед отображением значения. Однако во время преобразования недопустимые символы заменяются символом замены по умолчанию для набора символов. Это выдает недопустимое значение, поэтому, когда я преобразовываю его обратно в байтовый буфер, значение недопустимых символов заменяется байтовым значением символа замены по умолчанию. Есть ли простой способ сохранить байтовое значение недопустимого символа в строке? Я прочитал следующие сообщения stackoverflow, но обычно люди хотят просто заменить непечатаемые символы, мне нужно их сохранить.Проблемы преобразования между ByteBuffer и String в Java
Java: Converting String to and from ByteBuffer and associated problems
Есть простой способ сделать это, или мне нужно следить за всеми изменениями, которые происходят в текстовом редакторе и применить их к ByteBuffer?
Вот код, демонстрирующий проблему. В коде используется байт [] вместо ByteBuffer, но проблема такая же.
byte[] temp = new byte[16];
// 0x99 isn't a valid UTF-8 Character
Arrays.fill(temp,(byte)0x99);
System.out.println(Arrays.toString(temp));
// Prints [-103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103]
// -103 == 0x99
System.out.println(new String(temp));
// Prints ����������������
// � is the default char replacement string
// This takes the byte[], converts it to a string, converts it back to a byte[]
System.out.println(Arrays.toString(new String(temp).getBytes()));
// I need this to print [-103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, -103]
// However, it prints
//[-17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67]
// The printed byte is the byte representation of �
Я думаю, что для этого нужен код. Звучит как ошибка. Также может быть концептуальная ошибка: какая точная текстовая последовательность (ы), с которой вы столкнулись, превращается в байты? – markspace
Я обновил вопрос, включив в него код, показывающий проблему. Это не ошибка в моем коде, это должно работать таким образом по умолчанию. –