У меня есть код, который преобразуется из массива char в массив байтов (без создания каких-либо промежуточных строк и это требование), и я получаю некоторые дополнительные байты в конце. Вот некоторые тестового кода, который иллюстрирует эту проблему:Java - преобразованный массив массивов в байтовый массив - длина не соответствует
String s = "TomJSawyer";
System.out.println("Original String length = " + s.length());
char[] caOrig = s.toCharArray();
System.out.println("Original Char Array Length = " + caOrig.length);
byte[] ba1 = Charset.forName("UTF-8").encode(CharBuffer.wrap(caOrig)).array();
System.out.println("byte array converted from char array length = " + ba1.length);
byte[] ba2 = s.toString().getBytes("UTF-8");
System.out.println("byte array converted from String length = " + ba2.length);
А вот выход работает на jdk160_24 на Winodows.
Original String length = 10
Original Char Array Length = 10
byte array converted from char array length = 11
byte array converted from String length = 10
Дополнительный байт, который является результатом преобразования из массива символов с использованием Charset, равен нулю. По мере увеличения длины ввода число нулевых байтов, добавленных в конец массива байтов, увеличивается. Я ожидаю, что это имеет какое-то отношение к кодированию, но похоже, что я указываю UTF-8 в обоих местах, поэтому я не знаю, почему это было бы.
Если бы кто-нибудь мог объяснить мне, что происходит, или иначе указать мне в правильном направлении, я бы очень признателен. Заранее спасибо.
StringBuffer sb = "TomJSawyer"; – MoMan
Спасибо за мысль. К сожалению, String.valueOf() создает промежуточную строку, чего я пытаюсь избежать. – user2801442