ByteBuffer.asCharBuffer()
предполагает, что байты являются UTF-16. (Я не могу найти ничего в документах, где это явно сказано, но реализация просто обрабатывает пары байтов как младшие и старшие байты символов.) Если вам нужна другая кодировка, вам придется использовать другой подход.
Самый простой подход - просто создать String
:
CharBuffer document = CharBuffer.wrap(byteOutputStream.toString(encoding));
Я знаю, что вы сказали, что "пытались избежать создания новой строки", но ваш фрагмент кода все равно выделял отдельный байтовый массив (ByteArrayOutputStream.toByteArray()
"Создает вновь выделенный байтовый массив" в соответствии с документацией). Поскольку CharBuffer
поддерживает произвольный доступ, а многие кодировки (в частности, UTF-8) имеют переменную ширину, в любом случае, лучше всего просто преобразовать все это в начальные символы.
Если вы действительно хотите потоковый доступ (в отличие от произвольного доступа) к символам, тогда, возможно, CharBuffer
не лучший интерфейс для базового кода для принятия.