如何在java中将Reader转换为InputStream

我需要将 Reader 对象转换为 InputStream。我现在的解决方案如下。但我担心的是,由于这将处理大量数据,因此会大大增加内存使用量。

private static InputStream getInputStream(final Reader reader) {
   char[] buffer = new char[10240];
   StringBuilder builder = new StringBuilder();
   int charCount;
   try {
      while ((charCount = reader.read(buffer, 0, buffer.length)) != -1) {
         builder.append(buffer, 0, charCount);
      }
      reader.close();
   } catch (final IOException e) {
      e.printStackTrace();
   }
   return new ByteArrayInputStream(builder.toString().getBytes(StandardCharsets.UTF_8));
}

由于我使用 StringBuilder,这会将读取器对象的全部内容保留在内存中。我想避免这种情况。有没有办法可以通过管道传输 Reader 对象?对此的任何帮助表示高度赞赏。

回答

使用 Apache Commons IO 库,您可以在一行中完成此转换:

//import org.apache.commons.io.input.ReaderInputStream;

    
    InputStream inputStream = new ReaderInputStream(reader, StandardCharsets.UTF_8);

您可以在https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/ReaderInputStream.html阅读该类的文档

可能值得尝试一下,看看它是否也解决了内存问题。


以上是如何在java中将Reader转换为InputStream的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>