DigestInputStream в попытке с ресурсами закрывает исходный InputStream? - PullRequest
2 голосов
/ 10 мая 2019

Нужно ли явно закрывать исходный InputStream, если я объявил DigestInputStream в блоке попытки с ресурсами?

Пример:

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

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

Нужно ли мнезакрыть вручную или нет?

Ответы [ 2 ]

3 голосов
/ 10 мая 2019

Поскольку DigestInputStream является AutoCloseable, вам не нужно закрывать его вручную, когда вы объявили его в блоке try-with-resources.

Docu из AutoCloseable:

Метод {@link #close ()} объекта {@code AutoCloseable} вызывается автоматически при выходе из блока {@code try} -with-resources, для которого объект был объявлен в ресурсезаголовок спецификации.

Кроме того, FilterInputStream переопределяет метод close, который закрывает используемый InputStream.

1 голос
/ 10 мая 2019

Нет. Он будет закрыт автоматически.

Вот исходный код java.io.FilterInputStream:

public void close() throws IOException {
    in.close();
}
...