Закрытие StreamReader - PullRequest
       10

Закрытие StreamReader

0 голосов
/ 31 мая 2018

Получив ответ от сервера (отправив запрос http), я пытаюсь извлечь содержимое следующим образом:

HttpEntity entity = response.getEntity();

    if (entity == null) {
        ...
    }

    String content;
    try {
        Reader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
        content = IOUtils.toString(reader);
        reader.close();
        EntityUtils.consume(entity);
    } catch (IOException e) {
        ...
    }

Необходимо ли закрыть ридер (reader.close())?Или EntityUtils.consume(entity) достаточно?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы можете использовать выражение try-with-resources:

try(Reader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"))) {
    content = IOUtils.toString(reader);
    EntityUtils.consume(entity);
} catch (IOException e) {
    ...
}

, которое уже закрывает читатель для вас.

Для Java 6 вы должны использовать следующее:

Reader reader = null;
try {
    reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
    content = IOUtils.toString(reader);
    EntityUtils.consume(entity);
} catch (IOException e) {
    ...
} finally {
    if(reader != null){
        try {
            reader.close();
        } catch(IOException e){
            // can not be closed
        }
    }
}
0 голосов
/ 31 мая 2018

Это хорошая практика.При использовании ресурсов, которые позволяют «очистить» просто пойти на это.И простой способ - использовать try-with-resources:

try (InputStreamReader isr = new InputStreamReader(entity.getContent(), "UTF-8"); 
     Reader reader = new BufferedReader()) {
    content = IOUtils.toString(reader);
    EntityUtils.consume(entity);
} catch (IOException e) {
    ...
}

Значение: язык Java уже дает вам возможность сделать это автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...