Transformer un DataInputStream en byte[ ] [RESOLU]

Transformer un DataInputStream en byte[ ] [RESOLU] - Java - Programmation

Marsh Posté le 24-07-2006 à 15:01:26    

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
Reply

Marsh Posté le 24-07-2006 à 15:01:26   

Reply

Marsh Posté le 24-07-2006 à 15:06:43    

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
Reply

Marsh Posté le 24-07-2006 à 15:23:03    

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();

Reply

Marsh Posté le 24-07-2006 à 15:23:42    

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
Reply

Marsh Posté le 24-07-2006 à 15:37:42    

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

Reply

Marsh Posté le 24-07-2006 à 15:53:52    

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

Reply

Marsh Posté le 24-07-2006 à 16:47:31    

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

Reply

Marsh Posté le 24-07-2006 à 17:00:59    

you're welcome :jap:

Reply

Marsh Posté le 08-08-2006 à 11:22:50    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed