Почему byteArray имеет длину 22 вместо 20?
Вопрос
Мы пытаемся преобразовать строку в Byte []
, используя следующий код Java:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
Мы получаем байтовый массив длиной 22 байта, мы не уверены, откуда происходит это заполнение. Как мне получить массив длиной 20?
Решение
Ответ Александра объясняет, почему он есть, а не как избавиться от этого. Вам просто нужно указать порядковый номер, который вы хотите в названии кодировки:
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
Другие советы
Первые два байта могут быть меткой порядка байтов . Он определяет порядок байтов в каждом 16-битном слове, используемом в кодировке.
Попробуйте распечатать байты в шестнадцатеричном формате, чтобы увидеть, куда добавляются дополнительные 2 байта - они в начале или в конце?
Я предполагаю, что вы найдете маркер порядка байтов в начале (0xFEFF ) - это позволяет любому потребителю (получающему) байтовый массив распознавать, является ли кодировка прямым или старшим.
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