繁体   English   中英

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

[英]a question about closing a stream/socket in java

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

谢谢你好。

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

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

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

这个SO问题讨论了close()可能引发异常的情况。 实际上,他们中有不少人。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM