我是不是需要在 Java 中关闭 IO 流? [复制]
Posted
技术标签:
【中文标题】我是不是需要在 Java 中关闭 IO 流? [复制]【英文标题】:Should I need to close IO streams in Java? [duplicate]我是否需要在 Java 中关闭 IO 流? [复制] 【发布时间】:2019-10-14 05:06:09 【问题描述】:我正在使用 OutputStream
和 InputStream
来读取和写入 .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 流? [复制]的主要内容,如果未能解决你的问题,请参考以下文章