【发布时间】:2016-02-05 09:25:45
【问题描述】:
为什么我需要关闭 Streams(FileInputStream 等)? 如果我没有关闭流,Java是否不智能使用GC?
public void getLongStrings() throws IOException {
InputStream i1 = null;
InputStream i2 = null;
InputStreamReader isr1 = null;
InputStreamReader isr2 = null;
try {
i1 = aBook.getInputStream();
i2 = aNovel.getInputStream();
isr1 = new InputStreamReader(i1);
isr2 = new InputStreamReader(i2);
foo = FileCopyUtils.copyToString(isr1);
bar = FileCopyUtils.copyToString(isr2);
}
catch (IOException ioe) {
//do something appropriate here
} finally {
if (i1 != null) i1.close();
if (i2 != null) i2.close();
if (isr1 != null) isr1.close();
if (isr2 != null) isr2.close();
}
}
我需要关闭我使用的所有流吗?
【问题讨论】:
-
是的,您需要关闭流,因为流已经充满了内容,当您关闭流时,您可以再次使用它。使用刷新方法时,驱动器中的数据也会刷新。当您关闭流时,JVM 会看到该流不可用于进一步操作。
-
当我离开你家时,我应该关上门,还是假设你会走到我身后处理它?
-
您应该查看 try-with-resources 是否是您所针对的代码量。
-
JVM 内存不足时触发垃圾收集,而不是文件描述符不足时触发。因此,当您需要它们时,依靠垃圾收集为您清理可能无法为您留下足够的描述符。
标签: java stream fileinputstream