このクイックチュートリアルでは、プレーンJava、Guava、およびApacheCommonsIOライブラリを使用してリーダーをバイトに変換する方法[]を示します。

この記事は、ここBaeldungの「Java –BacktoBasic」シリーズの一部です。

1. Javaを使用

単純なJavaソリューションから始めましょう–中間の文字列を通過します:

@Test
public void givenUsingPlainJava_whenConvertingReaderIntoByteArray_thenCorrect() 
  throws IOException {
    Reader initialReader = new StringReader("With Java");

    char[] charArray = new char[8 * 1024];
    StringBuilder builder = new StringBuilder();
    int numCharsRead;
    while ((numCharsRead = initialReader.read(charArray, 0, charArray.length)) != -1) {
        builder.append(charArray, 0, numCharsRead);
    }
    byte[] targetArray = builder.toString().getBytes();

    initialReader.close();
}

読み取りは、一度に1文字ではなく、チャンクで行われることに注意してください。

2. グアバと

次に、Guavaソリューションを見てみましょう。これも中間文字列を使用しています。

@Test
public void givenUsingGuava_whenConvertingReaderIntoByteArray_thenCorrect() 
  throws IOException {
    Reader initialReader = CharSource.wrap("With Google Guava").openStream();

    byte[] targetArray = CharStreams.toString(initialReader).getBytes();

    initialReader.close();
}

組み込みのユーティリティAPIを使用して、プレーンなJavaの例の低レベルの変換を行う必要がないことに注意してください。

3. CommonsIOを使用

そして最後に、CommonsIOですぐにサポートされる直接的なソリューションを次に示します。

@Test
public void givenUsingCommonsIO_whenConvertingReaderIntoByteArray_thenCorrect() 
  throws IOException {
    StringReader initialReader = new StringReader("With Commons IO");

    byte[] targetArray = IOUtils.toByteArray(initialReader);

    initialReader.close();
}

これで、Java Readerをバイト配列に変換する3つの簡単な方法がわかりました。 GitHubでサンプルを確認してください。