Bonjour,

Je lis un flux de donné envoyé en streaming par le réseaux(protocole non définie, mais ca devrait pas changer grand chose je pense).
Je créé donc le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
   BufferedInputStream bis = new BufferedInputStream(url.openStream());
   byte[] tabDonnee = new byte[188];
   int nbDonneeLu;
   nbDonneeLu = bis.read(tabDonnee);
Je pensais qu'en utilisant la fonction read de cette façon, j'allais forcément lire mes 188 bytes (soit la taille d'un des packets que je veux récupérer). Mais queneni ! Si jamais le buffer ne contient pas encore les 188 bytes, au lieu d'attendre d'être de les contenir, il va renvoyer uniquement ce qui existe.

Après réflexion, je me dis que c'est pas si aberrant que ca que l'inputstream n'attende pas d'avoir 188. Par contre je ne comprend pas comment cela se fait que des packets de seulement quelques bytes puissent être envoyé sur ce flux ...

Il me faut donc pouvoir lire exactement 188 bytes à chaque fois, tout en gardant une sorte de timeout au cas ou le flux soit fermé.
Je pourrais faire comme ca :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
 
while(bis.avaible() < 188 || timer < 30s) {
...
}
Bon le "timer<30s" c'est pour simplifier hein ^^.

Je voulais donc savoir si :
J'ai raté un truc important dés le début ?
Ma solution convient ?
Il existe déjà un objet java appliquant ca ?