我在使用完毕后总是学会始终关闭一个流。 Java 7为您提供了一个新选项(即:try-with-resources),它一切都很好,除了当我关闭套接字的OutputStream
时,套接字也会被关闭。这会适得其反,因为我在流媒体应用程序中使用套接字。
因此,如果我执行下面的代码,我理解ObjectOutputStream
在try-block之后关闭,套接字OutputStream
也会关闭,最终导致关闭我的Socket。
try(ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream())) {
oos.writeObject(new MyDTO(data));
}
我当然可以将我的代码更改为如下所示,但每个人总是告诉我,当我使用它们时我应该关闭我的Streams。这只是一个方法,但我有多个其他方法也使用OutputStream
和ObjectOutputStream
将数据发送到我的客户端。
try {
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream())
oos.writeObject(new MyDTO(data));
}
由于没有关闭ObjectOutputStream
,我是否还需要其他错误和不当行为?当你有突发流量的应用程序时,我觉得套接字关闭很不错,但是当你做流媒体应用程序时它很奇怪。
最佳做法是什么?请教我。
答案 0 :(得分:1)
显然,如果您仍然需要资源,则不会关闭它们。我们的想法是在完成之后关闭它们。如果您正在创建聊天软件,则会保持连接处于打开状态并使用正在使用的资源。但是,如果您要创建某种穷人的FTP软件,则可能需要在文件传输后关闭连接。
try-with-resources
是为了更容易编写保证释放其资源的代码,这在处理流,数据库连接和其他此类事情时通常很有用。你没有 在任何地方使用它,特别是当它让你的工作更加努力时。
答案 1 :(得分:1)
这个问题确实没有意义。实际上,你不能在同一个套接字上创建多个ObjectOutputStreams
(即使你知道怎么做也没有优势),所以没有理由在{{{{{ 1}}首先。它应该与套接字一起创建,几乎肯定存储为某个实例成员,并在您完成连接时关闭。