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

关于在java中关闭流/套接字的问题,java,Java,方法socket.close()和someStream.close()何时抛出IOException? 我怎样才能解决这个问题呢 谢谢 benny.不检查close()的返回值是一个常见但严重的编程错误。前一次写入(2)操作中的错误很可能在最终关闭()时首次报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在NFS和磁盘配额中尤其明显 虽然关闭只读流不能抛出,但java的IO框架不能检查这一点,因为它没有静态检查读流和写流您应该做什么实际上取决于您的应用程序。例如,如果它是一个GUI应用程序

方法socket.close()和someStream.close()何时抛出IOException? 我怎样才能解决这个问题呢

谢谢
benny.

不检查close()的返回值是一个常见但严重的编程错误。前一次写入(2)操作中的错误很可能在最终关闭()时首次报告。关闭文件时不检查返回值可能会导致数据无声丢失。这在NFS和磁盘配额中尤其明显


虽然关闭只读流不能抛出,但java的IO框架不能检查这一点,因为它没有静态检查读流和写流

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

讨论了
close()
可能引发异常的情况。事实上,有很多

总的来说,要解决这个问题,你无能为力。但是,您可能需要采取一些恢复措施。例如:

  • 如果您正在编写一个关键文件,并且
    close()
    失败,那么您的应用程序应该采取措施确保它不会将文件的“良好”副本与其正在编写的文件的新副本相冲突

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

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

close()
没有任何要检查的“返回值”,它被声明为返回“void”(Java)!你的意思是“不处理任何(IO)异常”吗?