„Hallo Amigo! Die Klassen BufferedReader und InputStreamReader benutzt du schon sehr lange. Nun wollen wir uns ansehen, was sie tatsächlich tun.“

Die Klasse InputStreamReader ist ein klassischer Adapter vom InputStream-Interface zum Reader-Interface. Hier gibt es nichts hinzuzufügen.

Aber kurz gesagt, passiert das. Wenn du das nächste Zeichen aus einem InputStreamReader-Objekt anforderst (liest), liest es einige Bytes aus InputStream, die an den Konstruktor übergeben wurden, und gibt sie als ein Zeichen zurück.

Aber Reader ist nicht das praktischste Objekt, mit dem man arbeiten kann. Oftmals geht es nicht darum, alle vom Benutzer eingegebenen Zeichen auf einmal zu lesen, sondern diese Zeichen in Zeilen zu zerlegen.

„Aber die Reader-Klasse besitzt die Methode read(CharBuffer s). Können wir die nicht benutzen?“

„Diese Methode liest Daten in Blöcken von der Größe des Puffers und legt sie ins CharBuffer-Objekt

Text ist normalerweise in Zeilen unterteilt. Die read(CharBuffer s)-Methode liest unter Umständen also mehrere Zeilen auf einmal. Wenn wir Text exakt bis zum Ende einer Zeile (d.h. alle Zeichen einer Zeile bis zu einem Zeilenumbruch) lesen müssen, wäre es besser, nach etwas anderem zu suchen. Und es gibt tatsächlich eine alternative Methode. In der Klasse BufferedReader.

Die praktische BufferedReader-Klasse bietet eine sehr praktische Methode: readLine(). Mit dieser Methode können wir ganze Textzeilen auf einmal von einem Reader lesen. Wenn du readLine in deinem Code aufrufst, liest sie Zeichen aus dem Reader-Objekt, bis sie auf einen Zeilenumbruch stößt. Sobald das Zeilenumbruchszeichen auftritt, klebt die Methode diese Zeichen zu einer einzigen Zeichenkette zusammen und gibt sie zurück.

„Ich habe sie schon oft benutzt, aber nicht gewusst, wie sie funktioniert. Jetzt weiß ich es. Danke, Kim.“