Bonjour à tous !

Je suis confronté à un problème de lecture depuis un socket. Le protocole est le suivant :
  • Arrivée d'une ligne de texte terminée par un LF et contenant, entres autres, la taille du flux binaire qui va suivre.
  • Immédiatement, le flux binaire.


La grande majorité du protocole, en dehors des rares cas où j'ai besoin de transférer des données brutes, est textuelle. Donc j'utilise un BufferedReader dans une méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
        BufferedReader in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
        String answer = null;
        try {
            answer = in.readLine();
        } catch (IOException ex) {
              // Gestion de l'erreur
        }
Dans une autre méthode, j'ai donc la lecture du flux binaire, avec un InputStream classique et une boucle. Les deux lectures sont séparées, pour des questions de factorisation de code.

Sauf que...

De temps en temps, le BufferedReader absorbe un peu trop d'octets depuis le socket. Je l'ai vérifié en faisant des traces. Ce qui fait que la lecture binaire échoue, puisqu'il manque les premiers octets. Ce sont des JPEG, c'est assez facile à voir.

J'ai bien essayé d'initialiser le BufferedReader avec une taille de 1, mais je retombe sur le même problème. C'est assez énervant, parce que j'aimerais pouvoir ne pas me passer de cette classe, c'est quand même assez pratique pour le décodage des caractères. Mais je ne vois pas comment lui dire de ne pas bouffer les caractères après un readLine...

Si vous avez des idées, je suis preneur