如何在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阅读该类的文档
可能值得尝试一下,看看它是否也解决了内存问题。