gpt4 book ai didi

java - 关闭 AutoCloseable 的正确方法

转载 作者:行者123 更新时间:2023-12-01 14:21:17 26 4
gpt4 key购买 nike

关闭 OutputStream 时遵循的最可靠模式是什么? , ServerSocket , 或其他实现 AutoCloseable 的对象界面?

我应该使用 try - catch - finally ?或关闭 Hook 。

最佳答案

使用 AutoCloseable 的正确方法实例与 try -with-resources block ,因此资源可靠 closed即使抛出异常。
像这样:

    try (OutputStream stream = new ...) {
... // use the resource
} catch (IOException e) {
... // exception handling code
}
您也可以 control multiple resources使用一个 block (而不是嵌套 block ):
try (
OutputStream out1 = ...;
OutputStream out2 = ...;
InputStream in1 = ...;
InputStream in2 = ...;
) {
...
}
Don't use a try ... finally block :对于某些边缘情况(需要 suppressed exception 的情况),这将是不正常的。
不要使用shutdown-hook:资源很少是真正的全局性的,这种方法很容易出现竞争风险。 try -with-resources 是正确关闭 的推荐方式全部 AutoCloseable资源:两者同时被引入 Java,因此它们可以一起工作。
这样做隐含地有助于实现(推荐的)规则,即只有负责创建或打开某物的代码才负责处置或关闭它:如果传递了一个方法,则 OutputStream , 它不应该 close()它。相反,它应该依赖于调用者关闭它。如果您的方法都没有显式调用 close() ,保证您的代码永远不会抛出异常(例如 "Socket closed" java.net.SocketException ),因为它试图使用已关闭的资源。
这样做可以确保资源准确地关闭一次。请注意,通常关闭 AutoCloseable 是不安全的。不止一次: close()操作是 不是 保证是幂等的。

关于java - 关闭 AutoCloseable 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com