我应该使用try-catch-finally吗?或者是一个关机钩子.
解决方法:
像这样:
try (OutputStream stream = new ...) {
... // use the resource
} catch (IOException e) {
... // exception handling code
}
try (
OutputStream out1 = ...;
OutputStream out2 = ...;
InputStream in1 = ...;
InputStream in2 = ...;
) {
...
}
不要使用shutdown-hook:资源很少真正是gloabl,这种方法将容易发生种族危害. try-with-resources是正确关闭所有AutoCloseable资源的推荐方式:两者同时引入Java,以便它们可以一起工作.
这样做有助于实现(推荐)规则,只有负责创建或打开某些东西的代码负责处理或关闭它:如果一个方法传递给一个OutputStream,它永远不应该关闭()它.它应该依赖于调用者关闭它.如果您的方法都没有显式调用close(),则保证您的代码永远不会抛出异常(例如“Socket closed” java.net.SocketException),因为它会尝试使用已关闭的资源.
这样做可确保资源恰好关闭一次.请注意,通常不止一次关闭AutoCloseable是不安全的:close()操作不保证是幂等的.
标签:outputstream,java,resources,serversocket
来源: https://codeday.me/bug/20190916/1806761.html