Перейти к основному содержимому

Преобразование ByteBuffer в строку в Java

· 2 мин. чтения

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 .