Метод может не закрыть поток на исключении

Я получаю критическую ошибку с findbugs:

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

try {
...
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
...
} catch (IOException e) {
    throw new RuntimeException(e);
} finally {
    try {
        if (stdError != null) {
            stdError.close();
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

Сделайте я должен закрыться InputStreamReader также или p.getErrorStream (это возвращается InputStream)?

7
задан Harry Johnston 2 May 2014 в 01:44
поделиться

2 ответа

BufferedReader и InputStreamReader закрывают базовый поток при их закрытии. Все должно быть в порядке, закрыв stdError

4
ответ дан 7 December 2019 в 03:13
поделиться

Что происходит, когда возникает исключение при создании объекта BufferedReader ? Поток, управляемый объектом InputStreamReader , не закрывается до тех пор, пока в будущем сборщик мусора не решит уничтожить объект.

У вас, скорее всего, возникнут аналогичные проблемы, если при создании объекта InputStreamReader будет выдано исключение.

5
ответ дан 7 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

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