【发布时间】:2021-04-08 23:23:01
【问题描述】:
我需要将 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,这会将阅读器对象的全部内容保存在内存中。我想避免这种情况。有没有办法可以管道阅读器对象?对此高度赞赏的任何帮助。
【问题讨论】:
-
您究竟需要
InputStream做什么?如果您想将数据写入某个地方,也许不需要中间InputStream。 -
获取输出流而不是输入流通常更容易。
标签: java memory-management inputstream reader