« Bonjour, Amigo ! Tu utilises les classes BufferedReader et InputStreamReader depuis longtemps maintenant. Aujourd'hui, nous allons examiner ce qu'elles font vraiment. »

La classe InputStreamReader est un adaptateur classique de l'interface InputStream pour l'interface Reader. Rien à ajouter ici non plus.

Mais en bref, voici ce qui se passe. Lorsque tu demandes (lis) le caractère suivant d'un objet InputStreamReader, il lit quelques octets de l'InputStream passé au constructeur, et les renvoie sous forme de caractère (char).

Mais Reader n'est pas le plus commode des objets pour travailler. Souvent, ce que nous avons besoin de faire n'est pas de lire tous les caractères saisis par l'utilisateur à la fois, mais plutôt de diviser ces caractères en lignes.

« Mais la classe Reader a une méthode read(CharBuffer s). On ne peut pas l'utiliser ? »

« Cette méthode lit les données par morceaux de la taille de la mémoire tampon et les place dans l'objet CharBuffer. »

Le texte est généralement divisé en lignes. Ainsi, la méthode read(CharBuffer s) peut lire plusieurs lignes à la fois. Si nous devons lire le texte exactement jusqu'à la fin d'une ligne (c'est-à-dire tous les caractères d'une ligne jusqu'à un caractère de nouvelle ligne), il serait préférable de chercher autre chose. Et une méthode alternative existe. Dans la classe BufferedReader.

La classe BufferedReader, qui est une structure pratique au-dessus de Reader, possède une méthode très pratique : readLine(). Cette méthode nous permet de lire des lignes entières de texte dans un Reader en une fois. Lorsque tu appelles readLine dans ton code, la méthode lit des caractères de l'objet Reader jusqu'à ce qu'il rencontre un caractère de nouvelle ligne. Une fois arrivée au caractère de nouvelle ligne, la méthode assemble les caractères dans une chaîne unique et la renvoie.

« Je l'ai utilisée régulièrement, mais je ne savais pas comment elle fonctionnait. Maintenant je sais. Merci, Kim. »