Есть ли утечка ресурсов, если я использую потоковую передачу с BufferedReader в Java - PullRequest
2 голосов
/ 12 октября 2019

Это довольно большой код, который у меня есть. (без вызовов read или close). Нужно ли закрывать InputStream или BufferedReader? есть ли здесь какой-то запах или утечка кода?

InputStream stream = response.getEntity().getContent();
String response = new BufferedReader(new InputStreamReader(stream)).lines()
                .collect(Collectors.joining("\n"));

РЕДАКТИРОВАТЬ

на основе ответа, это правильно

InputStream stream = response.getEntity().getContent();
String response;
try (BufferedReader br = new BufferedReader(new InputStreamReader(responseStream))) {
                    response = br.lines().collect(Collectors.joining("\n"));
                }

1 Ответ

1 голос
/ 12 октября 2019

Нет, поток не закрывается автоматически при выполнении операции конвейера потока в таких случаях, и фактически, как указано в документации , также нет никаких гарантий того, что читатель будет на определеннойпозиция для чтения следующего символа или строки.

Короче говоря Stream s () не отвечают за манипулирование потоком (

try (InputStream stream = request.getEntity().getContent();
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream))) {
    String response = bufferedReader.lines().collect(Collectors.joining("\n"));
}
...