Необходимо ли закрыть InputStreamReader в BufferedReader
Мы все знаем, что это хорошая привычка закрывать все StreamReaders, которые мы определили в конце кода.
Теперь мы можем видеть, что два Читателя были определены как ниже. BufferedReader и InputStreamReader. BufferedReader был закрыт, но мы не можем закрыть InputStreamReader.
Код JAVA:
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
if (in != null) {
in.close();
}
Проблема здесь, если InputStreamReader в скобках должен быть закрыт? Приведет ли такой код к проблеме? Пожалуйста, скажите мне, спасибо ~
2 ответа
Там нет проблем с этим, на самом деле InputStreamReader
документация из Java API делает это.
В этом случае InputStreamReader
используется BufferedReader
Это означает, что они оба закроются, когда BufferedReader
close()
Функция вызывается так: "Закрывает поток и освобождает любые системные ресурсы, связанные с ним". Как InputStreamReader
Также очень четко "связан" с потоком, он тоже будет закрыт.
Когда вы строите BufferedReader
используя InputStreamReader
таким образом, они действительно являются одним и тем же читателем, а не двумя разными читателями.
Важно закрыть любой ресурс, который вы используете.
in.close
закроет BufferedReader, который в свою очередь закроет ресурсы, которые он сам использует т.е. InputStreamReader.
То, что вы делаете, будет закрывать оба из них, при условии, что перед вызовом не произойдет никаких исключений in.close
,
Чтобы убедиться, что он закрыт, независимо от того, что использовать try-with-resources
он автоматически закроет его для вас, как только ваш блок будет сделан или когда произойдет исключение.
Вы можете сделать это так:
try(BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()))){/*code here*/}
Все ресурсы в try()
гарантированно будут закрыты.