Tengo un InputStream que paso a un método para hacer algún procesamiento. Usaré el mismo InputStream en otro método, pero después del primer procesamiento, el InputStream aparece cerrado dentro del método.Cómo clonar un InputStream?
¿Cómo puedo clonar el InputStream para enviarlo al método que lo cierra? Hay otra solución?
EDITAR: los métodos que cierran el InputStream son un método externo de una lib. No tengo control sobre el cierre o no.
private String getContent(HttpURLConnection con) {
InputStream content = null;
String charset = "";
try {
content = con.getInputStream();
CloseShieldInputStream csContent = new CloseShieldInputStream(content);
charset = getCharset(csContent);
return IOUtils.toString(content,charset);
} catch (Exception e) {
System.out.println("Error downloading page: " + e);
return null;
}
}
private String getCharset(InputStream content) {
try {
Source parser = new Source(content);
return parser.getEncoding();
} catch (Exception e) {
System.out.println("Error determining charset: " + e);
return "UTF-8";
}
}
¿Desea "restablecer" la transmisión después de que el método haya regresado? Es decir, ¿leer la transmisión desde el principio? – aioobe
Sí, los métodos que cierran el InputStream devuelven el juego de caracteres que estaba codificado. El segundo método es convertir el InputStream a una Cadena utilizando el juego de caracteres encontrado en el primer método. –
En ese caso, debe poder hacer lo que estoy describiendo en mi respuesta. – Kaj