我是不是需要在 Java 中关闭 IO 流? [复制]

Posted

技术标签:

【中文标题】我是不是需要在 Java 中关闭 IO 流? [复制]【英文标题】:Should I need to close IO streams in Java? [duplicate]我是否需要在 Java 中关闭 IO 流? [复制] 【发布时间】:2019-10-14 05:06:09 【问题描述】:

我正在使用 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 中是如何工作的?感谢您的帮助。

【问题讨论】:

您正在使用try-with-resources 语句,该语句确保每个资源在语句结束时关闭。所以你不必自己做。 【参考方案1】:

使用try-with-resources 语句会自动关闭资源,所以你的close() 调用确实是多余的。

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

在 Java 中,try-with-resources 语句是声明一个或多个资源的 try 语句。资源作为一个对象,在完成程序后必须关闭。 try-with-resources 语句确保在语句执行结束时关闭每个资源,从而防止内存泄漏。

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

欲了解更多信息,请访问here.

【讨论】:

以上是关于我是不是需要在 Java 中关闭 IO 流? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java socket中关闭IO流后,发生啥事

java中的io流都有哪些

java的io中为啥有那么多种流啊?

如何在java中关闭当前工作目录(不是完整路径)[关闭]

如何避免在过滤器后在 dispatcherServlet 中关闭输入流

我需要在 Java 中关闭 InputStream 吗?