"¡Hola, amigo! Has estado usando las clases BufferedReader e InputStreamReader durante mucho tiempo. Ahora exploremos lo que realmente hacen".

La clase InputStreamReader es un adaptador clásico de la interfaz InputStream a la interfaz Reader . Aquí tampoco hay nada que añadir.

Pero en resumen, esto es lo que sucede. Cuando solicita (lee) el siguiente carácter de un objeto InputStreamReader , lee algunos bytes de InputStream pasados ​​al constructor y los devuelve como un carácter.

Pero Reader no es el objeto más conveniente para trabajar. A menudo, lo que necesitamos no es leer todos los caracteres ingresados ​​por el usuario de una sola vez, sino dividir estos caracteres en líneas.

"Pero la clase Reader tiene un método de lectura (CharBuffer s). ¿No podemos usar eso?"

"Este método lee datos en fragmentos del tamaño del búfer y los coloca en el objeto CharBuffer".

El texto generalmente se divide en líneas. Entonces, el método read(CharBuffer s) podría leer varias líneas a la vez. Si necesitamos leer texto exactamente hasta el final de una línea (es decir, todos los caracteres de una línea hasta un carácter de nueva línea), sería mejor buscar otra cosa. Y existe un método alternativo. En la clase BufferedReader .

La clase BufferedReader , que es una estructura conveniente sobre Reader, tiene un método muy conveniente: readLine() . Este método nos permite leer líneas completas de texto de un Lector de una sola vez. Cuando llama a readLine en su código, lee los caracteres del objeto Reader hasta que encuentra un carácter de nueva línea. Una vez que se encuentra el carácter de nueva línea, el método une estos caracteres en una sola cadena y la devuelve.

"He usado esto regularmente, pero no sabía cómo funciona. Ahora lo sé. Gracias, Kim".