Я полагаю, это потому, что когда вы закрываете поток, то любой нижележащий поток или сокет, который был связан с ним (то есть передан его конструктору), также закрывается.
http://www.javapractices.com/topic/TopicAction.do?Id=8
То же самое с BufferedReader. Когда вы закрываете BufferedReader, он закрывает любой основной поток / сокет, который использовался для «обтекания». Фактически мне недавно потребовалось иметь BufferedReader, который я мог бы закрыть без , когда он закрывал основной поток, и для этого мне пришлось расширить BufferedReader и переопределить close()
, чтобы не выполнять никаких действий.