IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[OUTPUTSTREAM] créer et lire un outputstream


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Par défaut [OUTPUTSTREAM] créer et lire un outputstream
    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 ?

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Par défaut
    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 ?

  4. #4
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    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 :
    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 ...
    Cependant, méfie toi que j'ai sans doute répondu un peu trop directement à ta question 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.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Par défaut
    Merci à vous pour vos réponses,

    mais j'ai du me planter quelque part, car mon code me donne rien
    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()));
    [console]
    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 ?

  6. #6
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Voilà ce que dit la javadoc concernant les Pipped

    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
    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.

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire un OutputStream
    Par litbos dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/09/2006, 10h16
  2. [Stream] OutputStream -> InputStream
    Par anykeyh dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 22/11/2005, 22h20
  3. [Image] image -> jpg -> OutputStream
    Par keil dans le forum Entrée/Sortie
    Réponses: 18
    Dernier message: 09/11/2005, 14h36
  4. [Stream] Transformer un OutputStream en InputStream
    Par kevredon dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 18/06/2005, 12h20
  5. Transformer un OutputStream en un InputStream
    Par glRaZ dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/04/2004, 11h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo