Я получаю критическую ошибку с 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
)?
BufferedReader и InputStreamReader закрывают базовый поток при их закрытии. Все должно быть в порядке, закрыв stdError
Что происходит, когда возникает исключение при создании объекта BufferedReader
? Поток, управляемый объектом InputStreamReader
, не закрывается до тех пор, пока в будущем сборщик мусора не решит уничтожить объект.
У вас, скорее всего, возникнут аналогичные проблемы, если при создании объекта InputStreamReader
будет выдано исключение.