1. 概要

ByteBuffer は、java.nioパッケージに含まれる多くの有益なクラスの1つです。 これは、チャネルからデータを読み取り、チャネルに直接データを書き込むために使用されます。

この短いチュートリアルでは、JavaでByteBufferを文字列に変換する方法を学習します。

2. ByteBufferStringに変換する

ByteBufferStringに変換するプロセスはデコード中です。 このプロセスには、Charsetが必要です。

ByteBufferStringに変換する方法は3つあります。

  • bytebuffer.array()から新しいStringを作成します
  • bytebuffer.get(bytes)から新しいStringを作成します
  • charset.decode()を使用する

簡単な例を使用して、ByteBufferStringに変換する3つの方法すべてを紹介します。

3. 実例

3.1. bytebuffer.array()から新しいStringを作成する

最初のステップは、ByteBufferからバイト配列を取得することです。 そのために、 ByteBuffer.array()メソッドを呼び出します。 これにより、バッキング配列が返されます。

次に、 String コンストラクターを呼び出すことができます。このコンストラクターは、バイト配列と文字エンコードを受け入れて、新しいStringを作成します。

@Test
public void convertUsingNewStringFromBufferArray_thenOK() {
    String content = "baeldung";
    ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());

    if (byteBuffer.hasArray()) {
        String newContent = new String(byteBuffer.array(), charset);

        assertEquals(content, newContent);
    }
}

3.2. bytebuffer.get(bytes)から新しいStringを作成する

Javaでは、 new String(bytes、charset)を使用して、 byte[]Stringに変換できます。

文字データの場合、UTF_8文字セットを使用してバイト[]文字列に変換できます。 ただし、 byte [] が非テキストバイナリデータを保持している場合、ベストプラクティスは、 byte[]Base64エンコード文字列に変換することです。

@Test
public void convertUsingNewStringFromByteBufferGetBytes_thenOK() {
    String content = "baeldung";
    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()を使用する

これは、ByteBufferStringに問題なく変換する最も簡単な方法です。

@Test
public void convertUsingCharsetDecode_thenOK() {
    String content = "baeldung";
    ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());

    String newContent = charset.decode(byteBuffer).toString();

    assertEquals(content, newContent);
}

4. 結論

このチュートリアルでは、JavaByteBufferStringに変換する3つの方法を学びました。 適切な文字エンコードを使用することを忘れないでください。この例では、UTF-8を使用しました。

いつものように、例の完全なソースコードは、GitHubから入手できます。