【发布时间】:2016-03-21 08:43:03
【问题描述】:
我一直都在学习总是在我用完一个流后关闭它。 Java 7 为您提供了一个新选项来执行此操作(即:try-with-resources),一切都很好,除了当我关闭套接字的OutputStream 时,套接字也会关闭。这适得其反,因为我在流应用程序中使用套接字。
所以如果我执行下面的代码,我知道ObjectOutputStream 在try-block 之后被关闭,并且套接字的OutputStream 也被关闭,这最终导致关闭我的套接字。
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,我是否必须预料到其他错误和不当行为?我认为当你有突发流量的应用程序时关闭套接字很好,但是当你做一个流应用程序时它有点奇怪。
最佳做法是什么?请教我。
【问题讨论】: