我总是学会在使用完流后总是关闭它。 Java 7 为您提供了一个新选项来执行此操作(即:try-with-resources),一切都很好,除了当我关闭套接字的 OutputStream
时,套接字也会关闭。这会适得其反,因为我在流应用程序中使用套接字。
因此,如果我执行下面的代码,我就会明白 ObjectOutputStream
在 try block 之后关闭,并且套接字的 OutputStream
也被关闭,这最终 导致关闭我的套接字。
try(ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream())) {
oos.writeObject(new MyDTO(data));
}
我当然可以将代码更改为如下所示,但每个人总是告诉我,当我使用完流后,应该关闭它们。这只是一个方法,但我还有多种其他方法也使用OutputStream
和ObjectOutputStream
将数据发送到我的客户端.
try {
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream())
oos.writeObject(new MyDTO(data));
}
由于不关闭ObjectOutputStream
,我是否需要预料到其他错误和不当行为?我认为,当您有突发流量应用程序时,关闭套接字很好,但当您执行流应用程序时,这有点奇怪。
最佳实践是什么?请教我。
最佳答案
显然,如果您仍然需要这些资源,就不会关闭它们。我们的想法是在使用完它们之后关闭它们。如果您正在创建聊天软件,则需要保持连接打开并使用资源。但是,如果您要创建某种穷人的 FTP 软件,您可能希望在文件传输后关闭连接。
try-with-resources
是为了更容易地编写保证释放其资源的代码,这在处理流、数据库连接和其他此类事物时通常很有用。您不必在任何地方都使用它,尤其是当它使您的工作更加困难时。
关于Java Socket 关闭 OutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36126325/