Comment connecter un OutputStream à un Reader?
Bonjour,
J'essaie actuellement de rediriger la sortie d'un objet JSch (de la bibliothèque JSch, qui gère le ssh) vers un reader, pour pouvoir analyser le résultat ligne par ligne.
Cette quesiton est générale, et ne concerne pas que JSch : Comment connecter un OutputStream à un InputReader?
En effet, toutes les méthodes que je trouve associent toujours les Inputs aux Readers, et les Outputs aux Writers. Mais comment faire quand on veut simplement lire et interpréter l'output d'un OutputStream?
Par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
import com.jcraft.jsch.*;
(...)
//connexion
JSch jsch=new JSch();
session=jsch.getSession(user, host, 22);
session.connect();
//obtention du canal sous forme de terminal
Channel SSHchannel=session.openChannel("shell");
//recupération du flux de sortie
OutputStream out = SSHchannel.getOutputStream();
//ce que j'aimerais pouvoir faire (mais ne sais pas comment faire) :
BufferedReader reader = new BufferedReader(out); //on ne peut pas passer un OutputStream à un Reader
//lecture depuis la sortie de ssh
line = reader.readLine(); |
J'ai essayé ceci, mais on n'a pas le droit de construire un PipedOutputStream à partir du simple OutputStream que j'ai récupéré et que je veux lire:
Code:
1 2
| PipedInputStream in = new PipedInputStream(new PipedOutputStream(SSHchannel.getOutputStream())); //interdit
BufferedReader reader = new BufferedReader(in); |
Symétriquement, je me demande comment envoyer le contenu d'un Writer.println vers un InputStream, même si je crois avoir trouvé:
(contrairement à PipedOutputStream, cette fois on a bien le droit de construire un PiedInputStream à partir d'un simple InputStream).
Code:
1 2 3 4 5 6
|
PipedInputStream pin = new PipedInputStream(SSHchannel.getInputStream());
PipedOutputStream pout = new PipedOutputStream(pin);
PrintStream writer = new PrintStream(pout);
writer.println("tralala"); |