Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2165 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Transformer un DataInputStream en byte[ ] [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transformer un DataInputStream en byte[ ] [RESOLU]

n°1412333
Lenoiche
Posté le 24-07-2006 à 15:01:26  profilanswer
 

Bonjour tout le monde,
 
Je recherche un moyen simple de transformer un flux DataInputStream en byte[]
C est faisable en enregistrant le flux en fichier, mais j'aimerais eviter cette solution. Puis transformer ce fichier en byte[]
 
Auriez vous une autre solution à me proposer ??


Message édité par Lenoiche le 24-07-2006 à 15:38:11
mood
Publicité
Posté le 24-07-2006 à 15:01:26  profilanswer
 

n°1412336
brisssou
8-/
Posté le 24-07-2006 à 15:06:43  profilanswer
 

Code :
  1. byte[] b = new byte[data.available()];
  2.   data.read(b);


 
non ? en même temps, peut-être pas hein... mais ç a l'air cohérent.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
n°1412361
Lenoiche
Posté le 24-07-2006 à 15:23:03  profilanswer
 

ca compile mais ca ne me donne pas le meme resultat que lorsque j enregistre le contenu dans un fichier
 

Code :
  1. // Ecriture dans un fichier
  2.                DataInputStream dis_Document
  3.                BufferedOutputStream ut = new BufferedOutputStream(new FileOutputStream("C:\\StreamServe.pdf" ));                                           
  4.                 int c;
  5.           while ((c = dis_Document.read()) != -1) {
  6.            ut.write(c);
  7.           }
  8.           dis_Document.close ();
  9.           ut.close();
  10.          // Lecture du fichier
  11.           java.io.File file = new java.io.File("C:\\StreamServe.pdf" );
  12.              java.io.BufferedInputStream bis = new java.io.BufferedInputStream(new
  13.              java.io.FileInputStream(file));
  14.              int bytes = (int) file.length();
  15.              byte[] buffer = new byte[bytes];
  16.              int readBytes = bis.read(buffer);
  17.              bis.close();

n°1412362
benou
Posté le 24-07-2006 à 15:23:42  profilanswer
 

brisssou a écrit :


non ? en même temps, peut-être pas hein... mais ç a l'air cohérent.


ouais, mais perdu quand même ...
 

Citation :

Returns the number of bytes that can be read from this input stream without blocking.


donc en gros, ca marcherait, mais seulement avec les InputStream non bufferisés ...
 
Pour faire ça, t'as pas le choix : il faut faire de la lecture bloc par bloc, la stocker dans un ByteArrayOutputStream jusqu'à épuisement du InputStream et faire un getByte() pour récupérer le contenu...
 
 

Lenoiche a écrit :

lorsque j enregistre le contenu dans un fichier


pas la peine de passer par un fichier : un ByteArrayOutputStream  te permettra de le faire en mémoire


Message édité par benou le 24-07-2006 à 15:24:46
n°1412375
Lenoiche
Posté le 24-07-2006 à 15:37:42  profilanswer
 

Super ça marche
 

Code :
  1. DataInputStream dis_Document;
  2.          ByteArrayOutputStream baos = new ByteArrayOutputStream();   
  3.          int c;
  4.           while ((c = dis_Document.read()) != -1) {
  5.            baos.write(c);
  6.           }
  7.          dis_Document.close ();
  8.          byte[] buffer = baos.toByteArray();


 
Merci messieurs pour voter aide

n°1412397
benou
Posté le 24-07-2006 à 15:53:52  profilanswer
 

je déconseille la lecture octet par octet : ca consomme bcp de CPU . Fais ça par bloc en utilisant un tableau de byte :
 

Code :
  1. byte[] buffer = new byte[bufferSize];
  2.  int nbRead;
  3.  while ((nbRead = inStream.read(buffer)) != -1) {
  4.   outStream.write(buffer, 0, nbRead);
  5.  }

n°1412454
Lenoiche
Posté le 24-07-2006 à 16:47:31  profilanswer
 

alors la , sur ce coup , je te fait entierement confiance
merci pour ton aide

n°1412465
benou
Posté le 24-07-2006 à 17:00:59  profilanswer
 

you're welcome :jap:

n°1422140
Smanux
Posté le 08-08-2006 à 11:22:50  profilanswer
 

Trop long tout ça, je propose la même chose en une ligne :
 

Code :
  1. byte[] buffer = IOUtils.toByteArray(in);


 
Bon ok avec Commons IO dans le classpath ;)
 
http://jakarta.apache.org/commons/io


Message édité par Smanux le 08-08-2006 à 11:23:16

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Transformer un DataInputStream en byte[ ] [RESOLU]

 

Sujets relatifs
[resolu] afficher une fois si il existe déjà[RESOLU]Lire quelques valeurs sur une base Mysql d'un forum ipb
[Résolu]Simulation de date sur excel[résolu] Internal class
[résolu] lecture à partir d'un BufferedReader[C++ / résolu] Vérifier le type donné à un template... typeid?
[RESOLU]Mon formulaire ne marche pas si je met le enctype ![résolu]Ouvrir un site web depuis une application en C
[résolu] UTF-8 et headers (session_start)[Resolu] Type de control (VBA)
Plus de sujets relatifs à : Transformer un DataInputStream en byte[ ] [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR