以下尝试块是否相似?两种情况下dataSocket.getOutputStream()是否都将关闭?

一个)

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

最佳答案

根据BufferedOutputStream JavaDoc,


  关闭此输出流并释放与该流关联的所有系统资源。


关闭outputStream将关闭基础输出流。 BufferedOutputStream的close()方法的源代码中也证明了这一点。

public void close() throws IOException {
    try {
      flush();
    } catch (IOException ignored) {
    }
    out.close();
}

07-28 00:26