如果我在try-with-resources块中声明了InputStream
,是否需要显式关闭原始DigestInputStream
?
示例:
InputStream is = ...;
MessageDigest md = ...;
try (final DigestInputStream digestInputStream = new DigestInputStream(is, md)) {
// Read the stream...
}
我是否需要手动关闭?
答案 0 :(得分:3)
由于DigestInputStream
是AutoCloseable
,因此您在try-with-resources块中声明它时无需手动将其关闭。
来自AutoCloseable
的文档:
{@ code AutoCloseable}的{@link #close()}方法 退出{@code时,会自动调用对象 try} -with-resources块,已在其中声明了对象 资源规范头。
此外,FilterInputStream
覆盖了close
方法,该方法关闭了已使用的InputStream
。
答案 1 :(得分:1)
不。它将自动关闭。
以下是java.io.FilterInputStream
的源代码:
public void close() throws IOException {
in.close();
}