このクイックチュートリアルでは、まず

Reader

から

InputStream

** への変換について説明します。最初はプレーンJava、次にGuava、そして最後にApache Commons IOライブラリです。

この記事はリンクの一部です:/java-tutorial[The Java – Back to Basic]シリーズ、ここBaeldung。


1 Java

を使う

Javaソリューションから始めましょう。

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

    char[]charBuffer = new char[8 **  1024];
    StringBuilder builder = new StringBuilder();
    int numCharsRead;
    while ((numCharsRead = initialReader.read(charBuffer, 0, charBuffer.length)) != -1) {
        builder.append(charBuffer, 0, numCharsRead);
    }
    InputStream targetStream = new ByteArrayInputStream(
      builder.toString().getBytes(StandardCharsets.UTF__8));

    initialReader.close();
    targetStream.close();
}

データの塊を一度に読み書きしていることに注意してください。


2グアバ

とは

次に、

もっと簡単なGuavaソリューション

を見てみましょう。

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

    InputStream targetStream =
      new ByteArrayInputStream(CharStreams.toString(initialReader)
      .getBytes(Charsets.UTF__8));

    initialReader.close();
    targetStream.close();
}

コンバージョン全体を1つのライナーに変換する、すぐに使える入力ストリームを使用していることに注意してください。


3コモンズIO

付き

最後に、Commons IOソリューションを見てみましょう。

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

    InputStream targetStream =
      IOUtils.toInputStream(IOUtils.toString(initialReader), Charsets.UTF__8);

    initialReader.close();
    targetStream.close();
}

ここではあらゆる種類のReaderを扱っていることに注意してください。ただし、テキストデータを特に扱う場合は、JVMのデフォルトを使用せずに文字セットを明示的に指定することをお勧めします。


Reader



InputStream

に変換する3つの簡単な方法があります。