我需要将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对象的全部内容保留在内存中。我想避免这样。有没有方法可以通过管道读取对象?非常感谢您的帮助。
2条答案
按热度按时间6l7fqoea1#
第一:一个罕见的需求,通常是相反的,或者有一个filechannel,所以可以使用bytebuffer。
pipedinputstream是可能的,在第二个线程中启动pipedoutputstream。然而,这是不必要的。
读书人给人以魅力。unicode代码点是从一个或两个字符(后者是代理项对)派生的。
xzlaal3s2#
使用apache commons io库,您可以在一行中完成此转换:
你可以在网上阅读这节课的文件https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/readerinputstream.html
也许值得一试,看看它是否也解决了内存问题。