java - programacion - ¿Debo cerrar Input Stream manualmente?
manual de programacion android pdf (6)
Estoy usando la biblioteca Xerces para analizar XML. Aquí está el fragmento de código para analizar:
Document doc = builder.parse (nuevo InputSource (nuevo StringReader (someXMLString)));
¿Debo cerrar manualmente el InputStream
en InputSource
o lo InputSource
con el método parse
?
Dado que no tienes recursos externos, solo un StringReader
, no necesitas cerrarlo. Sin embargo, lo haría de todos modos ... entonces, si alguna vez cambias el código para usar una entrada diferente, no tendrás accidentalmente una fuga de recursos.
(Para el código desechable, lo dejaría, pero tenga en cuenta que si no tiene cuidado, el código desechable tiene la costumbre de vivir más de lo esperado).
Deberías cerrarlo por ti mismo.
El método builder.parse no cierra la secuencia en su implementación. No sabrá cuándo es adecuado cerrar la secuencia, por lo que esto requiere que la transmisión se cierre manualmente.
Parece que no hay nada en la API de DocumentBuilder al respecto. Podemos probarlo como
InputStream is = new FileInputStream("test.xml") {
@Override
public void close() throws IOException {
System.out.println("close");
super.close();
}
};
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
documentBuilder.parse(is);
imprime close
. Pero dado que no hay nada en API al respecto, este comportamiento no está garantizado.
Si usa try-with, puede dejar que java lo cierre por usted. De lo contrario, recomendaría cerrarlo manualmente.
InputSource
es una envoltura de clase conveniente en la transmisión, por lo que no cierra la transmisión dentro de ella.
InputStream
supone que InputStream
está cerrado, ya que el método close()
:
Cierra esta secuencia de entrada y libera todos los recursos del sistema asociados con la secuencia.
No importa si tu transmisión usa recursos o no, es una buena forma de cerrarlo. Sólo para estar seguro.