下面的try-with代码块类似吗?在这两种情况下,dataSocket.getOutputStream()都会被关闭吗?
a)
try (Socket dataSocket = new Socket(...);
OutputStream socketStream = dataSocket.getOutputStream();
BufferedOutputStream outputStream = new BufferedOutputStream(socketStream)
) {.....}b)
try (Socket dataSocket = new Socket(...);
BufferedOutputStream outputStream = new BufferedOutputStream(dataSocket.getOutputStream())
) {.....}请注意。在b)中,没有显式的dataSocket.getOutputStream()变量,在a)中,我们有socketStream。
发布于 2014-04-27 21:35:21
根据BufferedOutputStream JavaDoc的说法,
关闭此输出流,并释放与该流关联的任何系统资源。
关闭outputStream将关闭底层输出流。BufferedOutputStream的close()方法的源代码也证明了这一点。
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}发布于 2014-04-27 21:35:57
是的,在这两种情况下都会关闭。即使只使用套接字语句,它们也应该是封闭的。当socket关闭时,流也会关闭。无论如何,我更喜欢在try-with结构上显式地添加Streams声明。
https://stackoverflow.com/questions/23324033
复制相似问题