Java 我是否需要处理或忽略OutputStream close()函数触发的IOException?
在下面的代码中,outPutStream的close函数抛出一个我应该捕获的IOException异常。我的问题是我需要处理它吗?因为我在使用移动设备,我想确保释放所有使用的资源,或者我可以安全地忽略例外情况Java 我是否需要处理或忽略OutputStream close()函数触发的IOException?,java,io,outputstream,Java,Io,Outputstream,在下面的代码中,outPutStream的close函数抛出一个我应该捕获的IOException异常。我的问题是我需要处理它吗?因为我在使用移动设备,我想确保释放所有使用的资源,或者我可以安全地忽略例外情况 //... OutputStream output = null; try { output = connection.getOutputStream(); output.write(query.getBytes(charset)); } finally {
//...
OutputStream output = null;
try {
output = connection.getOutputStream();
output.write(query.getBytes(charset));
} finally {
if (output != null) try {
output.close();
} catch (IOException e) {
// Do i need to do something here ?
}
}
如果关闭不起作用,你能做什么
您唯一能做的就是记录异常,正如@mprabhat所建议的,您可以将引用设置为null以加速GC。在最坏的情况下,您可以发出警告。但通常,在尝试关闭已关闭的会话时会引发此类异常。在这种情况下,您不需要做任何事情。java文档没有详细说明所有不同的条件关闭将抛出一个
IOException
,因此没有什么可以做的
至少可以将
OutputStream
的引用设置为null并记录异常。在有效的Java中,Joshua Bloch提到这是您可能希望忽略的异常之一。他说,一般来说,你确实希望对异常做更多的处理,而不仅仅是记录它们。你永远不应该忽略可能抛出的异常,看看Java 7中新增的Try with resources块,它可能会让这段代码看起来更漂亮一些:你能用它做什么?是的,这一直让我抓狂。我经常做的就是记录错误,这样,如果它发生了,我知道它发生了,但我不知道在这种情况下需要做什么才能恢复(如果有的话)。亨特·麦克米伦:但是你推荐的“尝试使用资源”块可能会忽略吉米询问如何处理的异常。阅读链接中关于“抑制”异常的讨论。调用flush()有意义吗?或者它无法执行。我认为这也会引发IOException。我认为这是没有意义的,在阅读一点后,close将首先调用flush。在我上面的评论中,我假设我们的close()已经引发异常。对不起,我不是指你的评论。我说的是我的第一个假设。谢谢你的跟进。