J'ai un InputStream que je passe à une méthode pour effectuer un traitement. Je vais utiliser le même InputStream dans une autre méthode, mais après le premier traitement, l'InputStream semble être fermé dans la méthode.
Comment je peux cloner l'InputStream pour l'envoyer à la méthode qui le ferme ? Il existe une autre solution ?
EDIT : la méthode qui ferme l'InputStream est une méthode externe d'une librairie. Je n'ai pas le contrôle de la fermeture ou non.
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";
}
}
2 votes
Voulez-vous "réinitialiser" le flux après le retour de la méthode ? C'est-à-dire lire le flux depuis le début ?
0 votes
Oui, la méthode qui ferme l'InputStream renvoie le jeu de caractères qui a été encodé. La deuxième méthode consiste à convertir l'InputStream en String en utilisant le charset trouvé dans la première méthode.
0 votes
Dans ce cas, vous devriez être en mesure de faire ce que je décris dans ma réponse.
0 votes
Je ne connais pas la meilleure façon de le résoudre, mais je résous mon problème autrement. La méthode toString du Jericho HTML Parser renvoie la chaîne formatée dans le bon format. C'est tout ce dont j'ai besoin pour le moment.