Java - Читатель для InputStream
В этом кратком руководстве мы рассмотримthe conversion from a Reader to an InputStream - сначала с простой Java, затем с Guava и, наконец, с библиотекой ввода-вывода Apache Commons.
Эта статья является частью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();
}
Обратите внимание, что мы используем стандартный поток ввода, который превращает преобразование в один лайнер.
3. С Commons 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();
}
Обратите внимание, что мы здесь имеем дело с любым типом Reader, но если вы работаете конкретно с текстовыми данными, всегда рекомендуется явно указать кодировку, а не использовать JVM по умолчанию.
Вот и все - 3 простых способа превратитьReader вInputStream.