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

Langage Java Discussion :

[debutant] conversion byte[] -> String , avec StringBuilder


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Par défaut [debutant] conversion byte[] -> String , avec StringBuilder
    Bonjour,

    Je m'y perds un peu avec les Stream, les Reader, les Buffered ...etc ;-) mais ça commence à venir.

    Comme je l'ai appris grâce à ce forum, il est nettement mieux de passer par StringBuilder que de concaténer des String...

    Alors voilà :

    je recois des paquets de byte[] de taille 1000, et l'ensemble de ces paquets represente une String.

    Donc on peut faire çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String tmp;
    String s="";
     
    while (il existe un paquet : byte[] paquet ) {
    tmp=new String(paq);
    s=s+tmp;
    }

    Mais je n'arrive pas à réécrire ça avec des StringBuilder....si quelqu'un peut m'indiquer la soluce :-)

    Merci, a+

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Pour construire un "StringBuilder" à partir d'un tableau de "byte":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringBuilder sb=new StringBuilder(new String(paquet));
    Pour concaténer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sb.append(new String(paquetSuivant));

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Par défaut
    Et voilà pour info le code correspondant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    InputStream is=get.getResponseBodyAsStream();
    BufferedInputStream bis=new BufferedInputStream(is);
    ZipInputStream zis = new ZipInputStream(bis);
     
    //Décompression du zip vers tmp.txt
    zis.getNextEntry();
    int BUFFER=1000;
    int count;
    byte data[] = new byte[BUFFER];
     
    String rep=System.getProperty("user.dir");
    String sep=System.getProperty("file.separator");
    FileOutputStream fos = new FileOutputStream(rep+sep+"tmp.txt");
    BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
     
    while ((count = zis.read(data, 0, BUFFER)) != -1) {
    	bos.write(data, 0, count);
    }
    bos.close();
    zis.close();
    fos.close();
    get.releaseConnection();
     
     
    // Import du .txt en String
    BufferedReader in = new BufferedReader(new FileReader(rep+sep+"tmp.txt"));
    StringBuilder buffer=new StringBuilder();
    String s = new String();
    while((s = in.readLine())!= null)
    	buffer.append(s).append(nl);
    in.close();
     
     
    //Effacement du fichier tmp.txt
    File  tmptxt;
    tmptxt=new File(rep+sep+"tmp.txt");
    tmptxt.delete();
     
     
    String resultatVoulu=buffer.toString();

    Le but de ma question étant de supprimer le passage par un fichier temporaire (tmp.txt).

    Si les pros ont des commentaires à faire sur le code, qu'ils n'hésitent pas : c'est encore un peu confus.

    Merci

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Par défaut
    merci de ta réponse seriousme :-)

    Mais est-ce que le fait d'instancier une String pour chaque paquet ne revient pas à concatener des String comme je le fais ?

  5. #5
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Mais est-ce que le fait d'instancier une String pour chaque paquet ne revient pas à concatener des String comme je le fais ?
    Oui mais au début tu parlais de séquences de "byte", or la méthode "append" de la classe "StringBuilder" n'est pas surchargée pour les séquences de "byte" d'où le passage par le constructeur de la classe "String" qui les accepte et renvoie une "String"; mais comme la méthode "readLine" renvoie une "String" directement pas besoin de le faire.

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringBuffer buffer = new StringBuffer();
    Si on n'utilise pas le "threadsafety" de la classe "StringBuffer" mieux vaut utiliser des "StringBuilder" plus performants.

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Par défaut
    Ok merci pour vos réponses,

    dbprog, j'ai effectivement essayé cette solution après les indications de seriousme ; (en utilisant StringBuilder).

    Alors ça marche, mais à moitié ;-). J'intuite peut être un problème de charSet...
    Ce qui est curieux, c'est que mon code (celui qui passe par un tmp.txt) marche très bien et il n'y a aucune référence aux charSet....

    J'investigue. (je plane)

  8. #8
    Membre chevronné
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    byte data[] = new byte[BUFFER];
    StringBuffer buffer = new StringBuffer();
     
    while ((count = zis.read(data, 0, BUFFER)) != -1) {
        buffer.append(new String(data));
    }
     
    return buffer.toString();
    Niveau mémoire c'est surement pas la meilleure chose à faire, mais je pense que cette solution fonctionne. Après si quelqu'un a mieux, n'hésitez pas !
    La vitesse de la lumière étant supérieure à la vitesse du son, certaines personnes brillent encore tant qu'elles n'ont pas parlé
    -----------------------------------------------------------
    Retrouvez mes articles informatique sur mon Site Developpez.
    Le reste, sur le Site perso !


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

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/12/2012, 11h19
  2. Conversion byte [] -> String
    Par MiJack dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2005, 18h16
  3. [debutant]Convertir un pointeur byte en String
    Par patmaba dans le forum SL & STL
    Réponses: 3
    Dernier message: 22/07/2005, 13h34
  4. [C#] Conversion d'un string en byte[] et inversement
    Par david71 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/12/2004, 15h10
  5. Réponses: 2
    Dernier message: 29/03/2004, 13h44

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