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 :

Modifié un InputStream


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut Modifié un InputStream
    Bonjour, j'ai un InputStream et je souhaiterai supprimer toutes les lignes contenu dans ce InputStream des que je trouve un délimiter... Mais je ne vois pas trop comment faire.
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Mon input entier:
     
    Host: localhost:1416
    User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.1) Gecko/20060311 Epiphany/1.8.5
    Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Et je voudrais effacer tout ce qui se situe au dessus de Accept-Encoding, et laisser le reste dans le InpuStream

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Fondamentalement tu ne peux pas modifier le InputStream lui même, tu dois transformer, filtrer pour obtenir un autre flux, flux qui peut être un OutputStream, un String, un truc, un machin qui est autre chose que le InputStream. Et tu fermes le InputStream une fois que tu as fini : il est ainsi détruit. Un stream est par construction une valeur temporaire.

    Pour repérer un motif ou faire un traitement dans un stream, plusieurs combines : tu lis caractère par caractère ce stream et tu fais les traitements au fur et à mesure ; ou bien tu exploites des filtres déjà fait, et tu exploites la technique des regexps ; ou autre.

    Et, à partir de ces premières impressions, en cherchant un peu dans les tutoriaux, je pense que tu devrais trouver des codes tout fait pour y arriver !

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 95
    Par défaut
    En fait dans mon inputstream j'ai deux parties:
    - une premiere qu il faut que je recupere sauf forme de string
    - et la deuxieme je dois faire une copie des information byte a byte, sachant que sa peut etre une image, un fichier ....

    J'ai donc tout lu avec la méthode suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line;
     
        try {
        	//lecture du header
        	while ((line = br.readLine()) != null) {
              // ici je séparer en 2 string les 2 parties
            }
    Ensuite je récupere les 2 string sur le premier je fais mes traitements, et le deuxiemen je le retransforme en inputstream avec cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ByteArrayInputStream(secondPartie.getBytes())
    Ensuite je lance une copie byte a byte, le probleme est qu en passant le inputstream en String puis de nouveau en inputstream, les données deviennent corrumpus.
    Il faudrait que j'arrive juste a extraite la premiere partie du inputstream.

    Mais comment faire ???

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je pense qu'il te faut un filtrage adapté aux deux phases.

    Sur la première phase tu liras la ligne, pour savoir ce que tu as. À la deuxième tu liras ce que tu as. Pour la première il faut détecter la ligne et comprendre des caractères. Pour la deuxième tu n'as rien à comprendre, juste placer les bytes dans un buffer.

    Le problème est la coordination entre les deux phases : il ne faut pas que la première lise des octets de la seconde, et ainsi de suite. Pour cette raison, je te conseille de ne pas utiliser de BufferReader, mais d'utiliser le InputStream brut, en te tapant toi même le codage de détection de ligne.

    À partir de là, et à partir de là seulement, tu peux brancher sur le InputStream un BufferInputStream, et lire le flux d'octets. Il ne faut pas utiliser à ce niveau de Reader, car cet objet transforme intempestivement (intenpestivement, dans ton cas), les bytes en caractères.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/11/2002, 14h08
  2. [VB6] Zone de liste modifiable basée sur un champ
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 27/11/2002, 13h41
  3. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49
  4. [VB6] [MDI] Modifier form en MDIform
    Par fikou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 12/09/2002, 13h48
  5. Réponses: 5
    Dernier message: 06/08/2002, 20h08

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