Подтвердить что ты не робот

Почему byteArray имеет длину 22 вместо 20?

Мы пытаемся преобразовать из строки в Byte[] с помощью следующего кода Java:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");

Мы получаем байтовый массив длиной 22 байта, мы не уверены, откуда это дополнение. Как получить массив длиной 20?

4b9b3361

Ответ 1

Ответ Alexander объясняет, почему он там, но не как избавиться от него. Вам просто нужно указать конечную цель в имени кодировки:

String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE

Ответ 2

Могут быть первые два байта: "Байт порядка" . Он определяет порядок байтов в каждом 16-битном слове, используемом в кодировке.

Ответ 3

Попробуйте распечатать байты в шестнадцатеричном формате, чтобы увидеть, где добавлены дополнительные 2 байта - находятся они в начале или конце?

Я выбираю, что вы найдете

Ответ 4

В начале 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