Java – InputStreamのリーダー
このクイックチュートリアルでは、the conversion from a Reader to an InputStreamを見ていきます。最初はプレーンJava、次にGuava、最後にApache CommonsIOライブラリです。
この記事は、例としてここのthe “Java – Back to Basic” seriesの一部です。
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. グアバと
次へ–much simpler Guava solutionを見てみましょう:
@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
最後に、the Commons IO solutionを見てみましょう。これも単純なワンライナーです。
@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();
}
ここではあらゆる種類のリーダーを扱っていることに注意してください。ただし、特にテキストデータを扱う場合は、JVMのデフォルトを使用するのではなく、文字セットを明示的に指定することをお勧めします。
これで、ReaderをInputStreamに変換する3つの簡単な方法ができました。