尝试使用资源:关闭 TWR 块中的资源时资源泄漏
Posted
技术标签:
【中文标题】尝试使用资源:关闭 TWR 块中的资源时资源泄漏【英文标题】:Try with Resources: Resource leak while closing resources in TWR block 【发布时间】:2015-01-25 10:34:10 【问题描述】:我读到我们不需要显式关闭资源,它将由 java 本身关闭,假设我编写了代码。
try(FileInputStream fis = new FileInputStream("");)
// code to to somethings
FileInputStream 将被自动关闭,如果在关闭时产生错误,它将抑制该表达式。
那么如果在关闭一个FileInputStream的时候抛出了异常,由于异常会被抑制,所以资源没有关闭,会不会产生资源泄漏?
【问题讨论】:
请注意,如果从 try 块中抛出异常,它只会抑制异常。通过在抛出的异常上调用getSuppressed()
仍然可以使用被抑制的异常。
见***.com/questions/26459988/…
【参考方案1】:
所以如果在关闭
FileInputStream
时产生expression异常,由于expression异常会被抑制,资源不会被关闭...
你不知道它没有关闭,只是你在关闭它时遇到了异常。
...会不会造成资源泄露?
它可能会或可能不会造成泄漏,但您无能为力。如果您尝试关闭该资源,那么您已经完成了您的工作。
但JB Nizet makes a very important point:只有如果在try
块内(或在附加的finally
块内)引发了其他异常,该异常才会被抑制。如果try
(或finally
)期间没有异常,则关闭资源的异常不会被抑制。
【讨论】:
以上是关于尝试使用资源:关闭 TWR 块中的资源时资源泄漏的主要内容,如果未能解决你的问题,请参考以下文章
java 7新特性-TWR(Try-with-resources)
Java 7 使用TWR(Try-with-resources)完成文件copy
高效 告别996,开启java高效编程之门 4-5TWR进阶与特殊情况