我需要关闭Java中的IO流吗?

时间:2019-10-14 05:06:09

标签: java memory-leaks io

我正在使用OutputStreamInputStream来读写.properties文件:

try (OutputStream output = new FileOutputStream(path)) {
    // ...
    output.close();
} catch (IOException e) {
    e.printStackTrace();
}

try (InputStream input = new FileInputStream(path)) {
    // ...
    input.close();
} catch (IOException e) {
    e.printStackTrace();
}

但是我的IDE表示那些close()调用是多余的。如果不关闭它们,是否会发生内存泄漏?在Java中如何工作?感谢您的帮助。

3 个答案:

答案 0 :(得分:8)

使用D :%norm! $p 语句将自动关闭资源,因此您的try-with-resources呼叫确实是多余的。

您可以阅读有关此主题的更多信息here

答案 1 :(得分:0)

  

但是我的IDE表示那些close()调用是多余的。如果不关闭它们,是否会发生内存泄漏?在Java中如何工作?

当您对资源使用try时,不需要关闭任何资源,例如OutputStream或InputStream。它将由JVM自动处理。不会有内存泄漏。 怎么运行的。您可以引用它here

答案 2 :(得分:0)

在Java中,try-with-resources语句是一个try语句,用于声明一个或多个资源。该资源是一个对象,在完成程序后必须将其关闭。 try-with-resources语句可确保在执行语句结束时关闭每个资源,以防止内存泄漏。

Java编译器采用广泛而严格的编译时检查,以便可以在部署程序之前及早发现与语法相关的错误。强类型语言(如C ++)的优点之一是它允许进行广泛的编译时检查,因此可以及早发现错误。 此外,IDE会提前为我们提供足够的信息,以便我们确保高质量的代码。

有关更多信息,请访问here.