关于在java中关闭流/套接字的问题

时间:2010-06-15 09:30:10

标签: java

socket.close()和someStream.close()方法何时抛出IOException? 我该如何解决这个问题?

感谢 尼。

3 个答案:

答案 0 :(得分:2)

不检查close()的返回值是一个常见但严重的编程错误。很可能首先在最后的close()上报告先前write(2)操作的错误。关闭文件时不检查返回值可能会导致数据无声丢失。使用NFS和磁盘配额尤其可以观察到这种情况。

虽然关闭readonly流不能抛出,但java的IO框架无法检查,因为它没有静态检查的读取和写入流

答案 1 :(得分:2)

你应该做什么取决于你的申请。例如,如果它是GUI应用程序并且用户试图保存文件,您可能希望通知用户并让她有机会将文件保存在其他位置。有时,在向用户报告错误之前再次尝试执行操作也是有意义的。否则,报告错误并继续或中止程序,具体取决于是否继续有效。

答案 2 :(得分:0)

This SO question讨论了close()可能引发异常的情况。实际上,它们中有不少。

一般来说,解决问题的方法并不多。但是,您可能需要采取一些恢复措施。例如:

  • 如果您正在撰写关键文件,并且close()失败,那么您的应用程序应该采取措施确保它不会破坏文件的“好”副本和新副本文件是写的。

  • 如果您使用网络套接字编写请求或响应,可能需要注意,请求/响应可能尚未发送,因此您可以在连接后重新发送已重新建立。

当然,报告/记录“失败”通常也是一个好主意。