У меня есть массив byte[]
, содержащий символы в кодировке Latin-1, и я хочу создать из него Java String.
Я знаю, что могу сделать new String(bytes)
, но смотрю на реализацию код, он включает запутанные логики c: поиск имени кодировки по умолчанию, выделение декодера, передача байтового массива в декодер. Поэтому я подозреваю, что (по крайней мере, для коротких строк) быстрее работает следующее:
char[] expanded = new char[bytes.length];
for (int i=0; i<bytes.length; i++) {
expanded[i] = (char)(bytes[i] & 0xff);
}
return new String(expanded);
Но это тоже не особенно эффективно: конструктор String(char[])
делает копию моего недавно созданного массива char[]
, просто на случай, если у меня хватит смелости изменить его позже.
Есть комментарии по любому из этих подходов? Есть ли способ лучше? (Примечание: большинство строк будут короткими. И я знаю, что могу провести микробенчмаркинг, и я знаю, что если бы я это сделал, был бы высокий риск получить неправильные ответы ...) `