@ForsakenHedgehog

Надо ли закрывать поток ввода/вывода или он закрывается автоматически?

В приведенных ниже примерах с клавиатуры считывается строка двумя немного отличающимися способами.
String file = new BufferedReader(new InputStreamReader(System.in)).readLine();


BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String file = reader.readLine();
reader.close();


В первом случае, как я понимаю, вручную я не могу закрыть поток ввода. Он закрывается автоматически или существует до завершения программы?

И подскажите на будущее, как называется такая синтаксическая конструкция создания экземпляра класса, как в первом примере? Один из тех случаев, когда не знаешь как сформулировать вопрос в гугл.
  • Вопрос задан
  • 827 просмотров
Решения вопроса 2
@melouw
Рекомендуется использовать try-with-resources
try (BufferedReader reader =
                     new BufferedReader(new InputStreamReader(System.in))) {
            String file = reader.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }


В таком случае ресурсы освободяться правильно
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
В первом случае потоки существуют до ближайшей сборки мусора. Но это плохая практика.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы