[JAVA] Stocker flux vers un byte[]

bapfuror Messages postés 45 Statut Membre -  
bapfuror Messages postés 45 Statut Membre -
Bonjour,

Je crois que mon problème se résume assez bien dans le titre du sujet.
Je souhaiterais copier un flux BufferedInputStream dans un un tableau de byte (sachant que je ne connais pas la taille de ce qui est dans le flux). J'ai déjà cherché pas mal de temps mais sans succès malheuresement.

J'espère que quelqu'un saura me donner des pistes !
A voir également:

2 réponses

Marco la baraque Messages postés 1030 Statut Contributeur 329
 
Bonjour,
As-tu essayé d'utiliser la méthode #BufferedInputStream.available() qui te retourne le nombre de bytes contenu dans ton buffer?
Ainsi tu pourrais créer un byte[] et le remplir grâce à la méthode #BufferedInputStream.read(byte[] b, int off, int len).

Par contre je ne saisis pas trop l'intérêt d'utiliser un BufferedInputStream si tu attends d'avoir toutes les données avant de faire une action (notamment ici de récupérer les données dans ton byte[]).

Cordialement,
-1
bapfuror Messages postés 45 Statut Membre 5
 
A vrai dire j'utilise BufferedInputStream car je dois modifier une classe existante.
Je reçois dans ce flux un fichier pdf. Ainsi lorsque je récupère le flux et que je souhaite ouvrir ce pdf adobe ne fait rien. (la copie dans byte[] est obligatoire car je dois réutiliser le contenu du flux ultérieurement)

BufferedOutputStream bos = new BufferedOutputStream(outstr);
BufferedInputStream bis = new BufferedInputStream(in);
byte[] tmp = new byte[bis.available()];
bis.read(tmp, 0, bis.available());
bos.write(tmp, 0, bis.available());

à comparaison ce code ci me permettait d'ouvrir le pdf mais je n'avais pas la copie dans le byte[]

BufferedInputStream bis = new BufferedInputStream(in);
BufferedOutputStream bos = new BufferedOutputStream(outstr);
byte[] buff = new byte[length];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}

Quelqu'un verrait il l'erreur dans le premier code
-1