我在阅读流时遇到错误。 Stream还包含图像和字符串数据。我的代码是,
static String convertStreamToString(java.io.InputStream is) {
Reader reader = new InputStreamReader(is);
BufferedReader r = new BufferedReader(reader);
StringBuilder total = new StringBuilder();
String line = null;
try {
while ((line = r.readLine()) != null) {
total.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(total);
return line;
}
在while循环中,它导致consol,因为它的堆内存正在增加,最后会出现错误"内存不足"
希望你的建议
答案 0 :(得分:0)
您只是阅读整个文件并将其存储到StringBuilder中。您的文件太大而无法容纳在RAM中,并且当JVM无法为StringBuilder分配更多空间时,只会导致OutOfMemory错误。 要么找到一种不将整个文件存储在内存中的方法,要么使用较小的文件(以前的解决方案显然更好)。
另外,请注意您在使用后没有关闭缓冲的阅读器。执行此操作的正确方法是使用try-with资源声明资源,例如:
try(Reader reader = new InputStreamReader(is);
BufferedReader r = new BufferedReader(reader)){
//your code here
}
答案 1 :(得分:0)
您需要关闭您的信息流,正如其他人所说。但是你还有其他几件事需要考虑:
String
s。如果文件确实包含图像和字符串,那么图像很可能比字符串大得多;如果你只是想要字符串,那么你需要找到一种过滤图像的方法。这可能会解决您的内存不足问题,并且还会阻止您在输出中使用废话。不幸的是,您还没有给我们足够的信息来帮助解决这个细节:它将取决于文件/流的格式。如果我是你,我会先攻击第一个问题。此刻,听起来即使您解决了内存问题,您仍然会得到无意义的输出,因为图像将被解码为String
。