正确的方法来关闭一个自动关闭

什么是最可靠的模式关闭的时候跟随OutputStream,ServerSocket实现了或其他对象AutoCloseable的接口?


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


慕标5832272
浏览 369回答 1
1回答

Helenr

使用AutoCloseable实例的正确方法是使用try-with-resources块,因此即使抛出异常,也可以可靠地关闭资源。像这样:    try (OutputStream stream = new ...) {       ... // use the resource    } catch (IOException e) {        ... // exception handling code    }您还可以使用一个块(而不是嵌套块)来控制多个资源:try (     OutputStream out1 = ...;     OutputStream out2 = ...;     InputStream in1 = ...;     InputStream in2 = ...;) {     ...}不要使用try... finally块:在某些边缘情况(需要抑制异常的情况)下,它将不当行为。不要使用关闭钩子:资源很少真正是虚假的,而且这种方法很容易出现种族危险。try-with-resources是正确关闭所有 AutoCloseable资源的推荐方式:两者是同时引入Java的,因此它们可以一起工作。隐式地执行此操作有助于实现(推荐)规则,即仅负责创建或打开某些内容的代码才负责处理或关闭该内容:如果方法传递了OutputStream,则绝不 应该这样close()做。相反,它应该依赖于调用方将其关闭。如果没有任何方法显式调用close(),则可以保证您的代码永远不会引发异常(例如“ Socket close”java.net.SocketException),因为它尝试使用已关闭的资源。这样做可以确保资源恰好关闭一次。请注意,通常,AutoCloseable多次关闭是不安全的:不能保证该close()操作是幂等的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java