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 :

Conversion InputStream en tableau de bytes


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Conversion InputStream en tableau de bytes
    Bonjour,

    je n'arrive pas à convertir un InputStream en byte[].
    Savez vous si cela est possible ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  3. #3
    Membre à l'essai
    Aucune méthode dans la javadoc ne permet de convertir un InputStream en tableau de bytes malheureusement...
    J'avais déjà regardé ...

  4. #4
    Expert éminent sénior
    alors faudrait peut etre lire mieux, il y a deux méthodes qui permettent de lire dans des tableaux de byte:

    read(byte[]) et read(byte[],int,int)
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  5. #5
    Membre à l'essai
    Oui mais mon pb n'est pas de lire dans un tableau de bytes mais bien de convertir un inputStream en tableau de bytes ..

  6. #6
    Expert éminent sénior
    je vois pas ce que tu veux faire d'autre pour "convertir" que de le lire dans un tableau de byte.....
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  7. #7
    Membre à l'essai
    En fait, voici un extrait de mon code

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    InputStream input = connection.getInputStream();


    Et là ma méthode a besoin de retourner un tableau de bytes (correspondant à une image jpeg.

    Donc, selon toi, je dois faire :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte[] data = ???
    input.read(data);


    Et là data correspondra à mon inputStream ?

  8. #8
    Expert éminent sénior
    normalement, quand on lit, on boucle sur read(byte[]) avec byte[] un buffer, jusqu'à arriver à la fin du stream (voir la valeur de retour de read). A chaque étape on rempli avec çà un buffer plus grand ou on traite le truc. Ton code pourrait etre par exemple (un exemple parmis tant d'autre), en pseudo code

    récupérer l'inputstream
    créer un buffer temporaire
    créer un bytearrayoutputstream
    tant que des données sont lue dans l'inputstream, les écrire dans bytearrayoutputstream
    finalement appeler toArray() sur le byteArrayoutputstream


    evidement, si tu connais a l'avance la taille de tes donnée, tu fait directement un byte[] a la bonne taille et tu fait un seul et unique appel au read() avec ça. C'est plus performant...
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  9. #9
    Membre à l'essai
    Merci bcp M'sieur

  10. #10
    Futur Membre du Club
    byte[] To InputStream
    bjr

    j'aimerais savoir coment convertir un byte[] en InputStream


  11. #11
    Membre régulier
    Citation Envoyé par tchize_ Voir le message
    normalement, quand on lit, on boucle sur read(byte[]) avec byte[] un buffer, jusqu'à arriver à la fin du stream (voir la valeur de retour de read). A chaque étape on rempli avec çà un buffer plus grand ou on traite le truc. Ton code pourrait etre par exemple (un exemple parmis tant d'autre), en pseudo code

    récupérer l'inputstream
    créer un buffer temporaire
    créer un bytearrayoutputstream
    tant que des données sont lue dans l'inputstream, les écrire dans bytearrayoutputstream
    finalement appeler toArray() sur le byteArrayoutputstream


    evidement, si tu connais a l'avance la taille de tes donnée, tu fait directement un byte[] a la bonne taille et tu fait un seul et unique appel au read() avec ça. C'est plus performant...
    Voici le code que j'ai, mais ça ne marche pas.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		ByteArrayOutputStream  out = new ByteArrayOutputStream();		
    		byte[]  buffer  = new byte[1024];
    		int l;
    		do {
    			l = (in.read(buffer));
    			if (l>0)
    			out.write(buffer,0,l);
    		} while (l>0) ;
    		data = out.toByteArray();

  12. #12
    Expert éminent
    Dans les apache commons IO tu as la méthode statique IOUtils.copy qui permet de copier tout un InputStream dans un OutputStream (pourquoi pas un ByteArrayOutputStream) en une commande.

    Ce serait mieux que ton bricolage bizarre là.

###raw>template_hook.ano_emploi###