try-with-resources中的DigestInputStream是否关闭原始InputStream?

时间:2019-05-10 09:25:54

标签: java stream try-catch

如果我在try-with-resources块中声明了InputStream,是否需要显式关闭原始DigestInputStream

示例:

InputStream is = ...;
MessageDigest md = ...;

try (final DigestInputStream digestInputStream = new DigestInputStream(is, md)) {
    // Read the stream...
}

我是否需要手动关闭?

2 个答案:

答案 0 :(得分:3)

由于DigestInputStreamAutoCloseable,因此您在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();
}