以下试用版块是否相似?在这两种情况下都会关闭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
。
答案 0 :(得分:1)
根据BufferedOutputStream
JavaDoc,
关闭此输出流并释放与该流关联的所有系统资源。
关闭outputStream
将关闭基础输出流。这也在BufferedOutputStream
的close()方法的源代码中得到证明。
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}
答案 1 :(得分:1)
是的,两种情况都会关闭。即使只使用Socket句子,它们也应该被关闭。当套接字关闭时,流将关闭。无论如何,我更喜欢明确地在试用结构上添加Streams声明。