【发布时间】:2021-09-30 14:55:35
【问题描述】:
我有一个方法:
public String tpeResponse(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder out = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
out.append(line);
}
reader.close();
is.close();
return out.toString();
}
在线:out.append(line); 我出错了:
java.lang.OutOfMemoryError: Java 堆空间
请帮助我使用 Streams 和 lambda 表达式重建此方法。
【问题讨论】:
-
问题似乎是您要读取的文件太大,Java 应用程序无法在内存中保存。我不确定流或 lambda 表达式将如何帮助您仍然需要返回一个字符串,并且您生成它的任何方法都可能仍然会达到内存限制。如果可能,请增加限制或不将文件读入字符串。而是以块或移动指针或其他方式读取和处理它。
-
既然你得到了
OutOfMemoryError,我认为你遇到的问题比“使用流和 lambda 表达式编写”更大。 -
OutOfMemoryError 在数据太大时发生。增加你的堆大小,它会解决你的问题
-
这对内存问题没有帮助。你需要做什么?
-
您需要为
BufferedReader reader = new BufferedReader(new InputStreamReader(is))使用Try-with-resources,以减少发生故障时的内存泄漏
标签: java lambda java-stream bufferedreader stringbuilder