Доброе время суток ..
Решил задачу, прошел валидатор, но остался осадочек после просмотра правильного решения, где поток BufferedReader не закрыт ...в чем тут дело ?
Сергей
36 уровень
Почему в правильном решение не закрывается BuffererdReader?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ksenia VolkovaJava Developer в DXCMaster
3 сентября 2021, 13:52
Без кода трудно что-то комментировать.
Если речь о BufferedReader для чтения с консоли - так его как правило и не надо закрывать (если это прямо не указано).
Общее правило - не закрывать (без веских оснований) те потоки, которые ты не открывал.
Системный поток ввода (System.in) ты не открываешь.
0
Сергей
3 сентября 2021, 14:36
А почему не надо закрывать BufferedReader, который с консоли читает посредством System.in?
0
Ksenia VolkovaJava Developer в DXCMaster
3 сентября 2021, 14:46решение
Потому что это системный поток ввода. Его открывает JVM при запуске. И как правило, он должен работать до тех пор, пока JVM не завершит работу.
Если твой метод закроет оборачивающий его BufferedReader, то будет закрыт и сам System.in. И если в дальнейшем другая часть программы захочет считать что-то с консоли - всё будет плохо.
Для примера:
На JavaRush в некоторых заданиях явным образом просят закрыть поток чтения с консоли. Но это потому, что в тестах JR System.in подменяется другим потоком (никто же не будет сидеть на стороне сервера и вбивать вручную в консоль строки для теста каждый раз, когда кто-то сдает задачу). Но если этого в задаче не сказано, то закрывать его не надо.
+2