Ответ 1
Ответ Alexander объясняет, почему он там, но не как избавиться от него. Вам просто нужно указать конечную цель в имени кодировки:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
Мы пытаемся преобразовать из строки в Byte[]
с помощью следующего кода Java:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
Мы получаем байтовый массив длиной 22 байта, мы не уверены, откуда это дополнение. Как получить массив длиной 20?
Ответ Alexander объясняет, почему он там, но не как избавиться от него. Вам просто нужно указать конечную цель в имени кодировки:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
Могут быть первые два байта: "Байт порядка" . Он определяет порядок байтов в каждом 16-битном слове, используемом в кодировке.
Попробуйте распечатать байты в шестнадцатеричном формате, чтобы увидеть, где добавлены дополнительные 2 байта - находятся они в начале или конце?
В начале UTF имеет маркер байтового порядка, который сообщает, что этот поток кодируется в определенном формате. Как указали другие пользователи,
1-й байт - 0XFE
2-й байт - 0XFF
остальные байты -
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57