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

例:

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

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


是否需要手动关闭?

最佳答案

因为DigestInputStreamAutoCloseable,所以在try-with-resources块中声明它时无需手动将其关闭。

AutoCloseable中的文档:


  {@code AutoCloseable}的{@link #close()}方法
  退出{@code时,会自动调用对象
  try} -with-resources块,已在其中声明了对象
  资源规范头。


另外,FilterInputStream会覆盖close方法,该方法将关闭使用的InputStream

09-25 21:02