1. 概要
ByteBuffer は、java.nioパッケージに含まれる多くの有益なクラスの1つです。 これは、チャネルからデータを読み取り、チャネルに直接データを書き込むために使用されます。
この短いチュートリアルでは、JavaでByteBufferを文字列に変換する方法を学習します。
2. ByteBufferをStringに変換する
ByteBufferをStringに変換するプロセスはデコード中です。 このプロセスには、Charsetが必要です。
ByteBufferをStringに変換する方法は3つあります。
- bytebuffer.array()から新しいStringを作成します
- bytebuffer.get(bytes)から新しいStringを作成します
- charset.decode()を使用する
簡単な例を使用して、ByteBufferをStringに変換する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()を使用する
これは、ByteBufferをStringに問題なく変換する最も簡単な方法です。
@Test
public void convertUsingCharsetDecode_thenOK() {
String content = "baeldung";
ByteBuffer byteBuffer = ByteBuffer.wrap(content.getBytes());
String newContent = charset.decode(byteBuffer).toString();
assertEquals(content, newContent);
}
4. 結論
このチュートリアルでは、JavaでByteBufferをStringに変換する3つの方法を学びました。 適切な文字エンコードを使用することを忘れないでください。この例では、UTF-8を使用しました。
いつものように、例の完全なソースコードは、GitHubでから入手できます。