me sale un error crítico con findbugs:método puede fallar para cerrar la corriente de excepción
El método crea un objeto corriente IO, no asignarlo a cualquier campo, pasarlo a otros métodos, o devolverlo , y no parece cerrarlo en todas las rutas de excepción posibles fuera del método. Esto puede provocar una fuga de descriptor de archivo. En general, es una buena idea utilizar un bloque finally para garantizar que las transmisiones estén cerradas.
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);
}
}
¿Es necesario cerrar InputStreamReader
también o p.getErrorStream
(Devuelve InputStream
)?
Usted y findbugs son técnicamente correctos. Sin embargo, la única forma en que ese constructor de BufferedReader puede fallar es con un 'Error'; p.ej. OOME o SOE. Es poco probable que una aplicación intente recuperarse de una de ellas, por lo que es poco probable que la fuga de la secuencia sea importante. –