Простой ответ - «нет».Что если байт является первым байтом многобайтовой последовательности?Ничто не будет поддерживать состояние.
Если у вас есть все байты логического символа в руке, вы можете сделать:
sb.append(new String(bytes, charset));
Но если у вас есть один байт UTF-8, выне может сделать это вообще с классами stock.
Не было бы очень сложно создать сокрушенный StringBuffer, который использует классы java.nio.charset для реализации добавления байтов, но это не будет один илидве строки кода.
Комментарии указывают на то, что здесь необходимы базовые знания Unicode.
В UTF-8 'a' - один байт, 'á' - два байта, '丧'это три байта, а '?' это четыре байта.Задача CharsetDecoder - преобразовать эти последовательности в символы Unicode.Рассматриваемый как последовательная операция над байтами, это, очевидно, процесс с отслеживанием состояния.
Если вы создаете CharsetDecoder
для UTF-8, вы можете передавать его только байтом за раз (в ByteBuffer
) через этот метод .Символы UTF-16 будут накапливаться на выходе CharBuffer
.