2015-01-20 6 views
3

В учебнике по потоку ничего не говорится о закрывающих потоках, полученных от Files.newInputStream(path). Только некоторые неясный:Должен ли я закрывать потоки, созданные с помощью java.nio.file.Files.newInputStream?

ли возвращаемый поток асинхронно закрываемый и/или прерываемых сильно файл поставщик систем специфична и поэтому не указан.

Что такое «асинхронно» в этом контексте? Если я закрываю поток явно или если другой поток закрывает поток асинхронно?

+0

Осталось незакрытым, кажется, что файловый дескриптор занят в файле, предоставленном потоком ... на самом деле это не то, что вы можете иметь дело с большими каталогами. – matanster

ответ

2

Вы обязательно должны закрыть полученные InputStream, как и все остальные. Термин «асинхронно закрываемый» относится к способности закрывать поток, в то время как другой поток блокируется при операции ввода-вывода на нем.

Из InterruptibleChannel документации:

Канал, который реализует этот интерфейс асинхронно закрываемой: Если поток блокируется в операции ввода/вывода на прерываемого канал, то другой поток может вызвать закрытым способом телеканала , Это приведет к тому, что заблокированный поток получит исключение AsynchronousCloseException.

+0

Итак, авторы учебника только что забыли о закрытии потоков? http://docs.oracle.com/javase/tutorial/essential/io/file.html#textfiles – math

+1

Нет. Они используют правильную идиому автоматического управления ресурсами. –

+0

Вот что я хочу знать, что это за Идиома, где это описано? Деструктор закрывает поток? Кажется, я упустил из виду существенную часть. – math

Смежные вопросы