Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Закрытие потоков


Автор: Java2 10.8.2006, 10:41
Есть код:
InputStreamReader iStreamReader = new InputStreamReader(inputStream)
BufferedReader reader = new BufferedReader(iStreamReader);

Если я сделаю reader.close();, то уже нет необходимости закрывать поток InputStreamReader и inputStream?
Будут ли промежуточные потоки закрыты автоматически?
Или если закрыть промежуточный поток inputStream, тогда всё остальное закроется само?

Автор: LSD 10.8.2006, 10:47
При закрытии вышележащий поток сбрасывает буфер и закрывает нижележащий поток. Т.е. в твоем случае BufferedReader закроет InputStreamReader, а тот в свою очередь закроет InputStream.

Вышележащие потоки не будут закрыты при закрытии нижележащего, будет просто выброшено IOException при попытке записи в поток.

Автор: skhilkov 10.8.2006, 10:51
LSD...  спасибо

Автор: UnicornMirage 10.8.2006, 11:04
вопрос дополнения: тогда сбрасывать буфер у потока (flush()) необязательно перед закрытием?

Автор: LSD 10.8.2006, 11:15
Цитата(UnicornMirage @  10.8.2006,  12:04 Найти цитируемый пост)
вопрос дополнения: тогда сбрасывать буфер у потока (flush()) необязательно перед закрытием?

Все Sun-овские классы сбрасывают свой буфер перед закрытием, хотя спецификация и не обязывает их это делать.

Автор: Java2 10.8.2006, 12:01
А в случае с закрытием сокета, можно закрыть только сам сокет, т.е.
clientSocket.close();
либо закрыть всё, т.е.:
output.close();
input.close();
clientSocket.close();
?

Автор: LSD 10.8.2006, 12:24
Можно закрыть, только сокет.
Другое дело, что у сокета можно по отдельности закрывать Input и Output, и иногда это бывает нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)