Bonjour,
j'ai une méthode qui attend un outputStream.
J'aimerais donc en créer un, puis lire son contenu "rempli" par ma méthode.
Auriez vous des idées ?
Bonjour,
j'ai une méthode qui attend un outputStream.
J'aimerais donc en créer un, puis lire son contenu "rempli" par ma méthode.
Auriez vous des idées ?
En te rendant sur la javadoc tu peux te rendre compte que OutputStream est une classe abstraite mère d'autres classes qui te permettront de lire facilement certains type de données.
Donc cela dépend de ce que tu veux faire.
Par exemple en utilisant la classe BufferedOutputStream tu pourras écrire tes données en utilisant un tampon.
Une distinction est à faire au départ:
- Writer : écrire des données de type caractères
- OutputStream : écrire des données de type binaire
Suivant tes besoins tu pourras certainement trouver dans la javadoc la classe (étendant l'une de ces 2 classes abstraites) qui te convient le mieux
j'aimerais préciser (même si ca a du se voir
que je débute un peu avec les I/O)
J'avais consulter la java doc avant de poser la question, mais elle ne m'avait pas bien aidée... (ou alors, je n'ai pas su exploiter les informations fournies).
Car en effet, le bufferedoutputstream m'intéressait pas mal, mais son constructeur requiert... un outputstream !! (et me revoila au point de départ)
donc je t'explique ce que je souhaite faire : J'aimerais lire l'outputstream que me rempli l'application et l'exploiter, c'est à dire faire des recherche dans la chaine de caractère que je souhaite récupérer.
Pour l'instant, le outputstream défini est System.out, et je vois les résultats affichés sur ma sortie standard (la console d'eclipse).
Maitenant, comment faire pour récupérer ce que je vois ?
Le départ avec les IO n'est pas forcément facile, mais ce paquage est très bien fait, et je te conseille de faire l'effort de bien le comprendre.
Pour pouvoir récupérer facilement le contenu d'un OutputStream tu peux utiliser un ByteArrayOutputStream, de cette façon approximative :
Cependant, méfie toi que j'ai sans doute répondu un peu trop directement à ta question
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 out = new ByteArrayOutputStream(); // possible puisque ByteArray... est une classe concrète laMethodeQuiRemplitLeFlux(out); byte[] rempli = out.toByteArray(); ... utilisation de rempli ...Il y a certains problèmes dont tu sembles ne pas avoir conscience
Les remarques de Pollux sont très pertinentes !
N'hésites pas à poser d'autres questions, on sait que les départs peuvent être durs.
Merci à vous pour vos réponses,
mais j'ai du me planter quelque part, car mon code me donne rien
[console]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 PipedOutputStream cmd = new PipedOutputStream(); ByteArrayOutputStream sortie = new ByteArrayOutputStream(); channel.setInputStream(new PipedInputStream(cmd)); channel.setOutputStream(sortie); channel.connect(); System.out.println("connection effectuée"); cmd.write("more fichier.xml \n".getBytes()); System.out.println(sortie.size()); System.out.println(String.valueOf(sortie.toByteArray()));
connection effectuée
0
[B@1e45a5c
[/console]
pourtant, ca marche bien si je mets System.out à la place de sortie ???
Comment ce fait-il que la taille soit nulle ?
Voilà ce que dit la javadoc concernant les Pipped
Comme tu le vois ces streams sont généralement utilisés pour la communication entre Thread ce qui n'est pas le cas dans ton code. Or comme il est dit cela génère facilement des deadlocks, c'est peut-être ce qui se passe dans ton cas.Typically, data is read from a PipedInputStream object by one thread and data is written to the corresponding PipedOutputStream by some other thread. Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread
Ce que tu veux faire précisémment c'est envoyer une commande en texte? Pour cela comme je l'ai dit, tourne-toi plutôt sur les implémentations de Reader/Writer. Elles sont faites pour les données caractères.
Tu peux par exemple utiliser un BufferedReader pour lire et un BufferedWriter pour écrire... Sinon dis-nous en plus sur ton applic.
Partager