Java 尝试使用隐式和显式可关闭项的行为
以下试块是否相似?在这两种情况下,Java 尝试使用隐式和显式可关闭项的行为,java,stream,Java,Stream,以下试块是否相似?在这两种情况下,dataSocket.getOutputStream()是否都会关闭 (a) (b) 注意。在b)中,dataSocket.getOutputStream()没有显式变量,在a)中我们有socketStream 根据BufferedOutputStreamJavaDoc 关闭此输出流并释放与该流关联的所有系统资源 关闭outputStream将关闭底层outputStream。BufferedOutputStream的close()方法的源代码也证明了这一点 是
dataSocket.getOutputStream()
是否都会关闭
(a)
(b)
注意。在b)中,
dataSocket.getOutputStream()
没有显式变量,在a)中我们有socketStream
根据BufferedOutputStream
JavaDoc
关闭此输出流并释放与该流关联的所有系统资源
关闭outputStream
将关闭底层outputStream。BufferedOutputStream
的close()方法的源代码也证明了这一点
是的,在这两种情况下都将关闭。即使只使用套接字语句,它们也应该关闭。套接字关闭时,流将关闭。无论如何,我更喜欢在try with structure上显式地添加流声明
try (Socket dataSocket = new Socket(...);
OutputStream socketStream = dataSocket.getOutputStream();
BufferedOutputStream outputStream = new BufferedOutputStream(socketStream)
) {.....}
try (Socket dataSocket = new Socket(...);
BufferedOutputStream outputStream = new BufferedOutputStream(dataSocket.getOutputStream())
) {.....}
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}