1. Обзор
ByteBuffer
— один из многих полезных классов в пакете java.nio
. Он используется для чтения данных из каналов и прямой записи данных в каналы.
В этом коротком руководстве мы узнаем, как преобразовать ByteBuffer
в String
в Java .
2. Преобразование байтового буфера
в строку
Процесс преобразования ByteBuffer
в строку
— это декодирование. Для этого процесса требуется Charset
.
Есть три способа преобразовать ByteBuffer
в String
:
- создание новой
строки
изbytebuffer.array()
- создание новой
строки
изbytebuffer.get(bytes)
- используя
charset.decode()
Мы будем использовать простой пример, чтобы продемонстрировать все три способа преобразования ByteBuffer
в String
.
3. Практический пример
3.1. Создание новой строки
из bytebuffer.array()
Первый шаг — получить массив байтов из ByteBuffer
. Для этого мы вызовем метод ByteBuffer.array()
. Это вернет резервный массив.
Затем мы можем вызвать конструктор String
, который принимает массив байтов и кодировку символов для создания нашей новой строки
:
@Test
public void convertUsingNewStringFromBufferArray_thenOK() {
String content = "foreach";
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());
if (byteBuffer.hasArray()) {
String newContent = new String(byteBuffer.array(), charset);
assertEquals(content, newContent);
}
}
3.2. Создание новой строки
из bytebuffer.get(bytes)
В Java мы можем использовать new String(bytes, charset)
для преобразования byte[]
в String
.
Для символьных данных мы можем использовать кодировку UTF_8
для преобразования byte[]
в String
. Однако, когда byte[]
содержит нетекстовые двоичные данные, лучше всего преобразовать byte[]
в строку с
кодировкой Base64 : ``
@Test
public void convertUsingNewStringFromByteBufferGetBytes_thenOK() {
String content = "foreach";
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());
byte[] bytes = new byte[byteBuffer.remaining()];
byteBuffer.get(bytes);
String newContent = new String(bytes, charset);
assertEquals(content, newContent);
}
3.3. Использование charset.decode()
Это самый простой способ без проблем преобразовать ByteBuffer
в String :
@Test
public void convertUsingCharsetDecode_thenOK() {
String content = "foreach";
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());
String newContent = charset.decode(byteBuffer).toString();
assertEquals(content, newContent);
}
4. Вывод
В этом руководстве мы узнали три способа преобразования ByteBuffer
в String
в Java
. Просто не забудьте использовать правильную кодировку символов , и в нашем примере мы использовали UTF-8
.
Как всегда, полный исходный код примеров доступен на GitHub .