Erklärung BufferedReader und InputStreamReader

Hallo zusammen,

ich bräuchte eine Erklärung zu BufferedReader und inputStreamReader. Ich finde im Internet nichts vernünftiges dazu.
Also was genau das macht, bzw. warum ich es im unten stehenden Code verwende.
Und vielleicht kann mir auch jemand folgenden Code erklären, bzw. die Zeilen, die hervorgehoben sind:

[CODE lang="java" highlight="7-10, 18-26"]import java.io.BufferedReader;
import java.io.InputStreamReader;

public class App {
static Adventskalender adventskalender = new Adventskalender();

public static void main(String[] args) throws Exception {
System.out.println(adventskalender);

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

while(true) { // Dauerhafte Schleife
int input = Integer.parseInt(reader.readLine());
if(input < 1 || input > 24) {
break; // Unpassende Eingabe bricht Schleife ab
}

System.out.println(); // Platz machen
if(!adventskalender.isTuerchenOffen(input)) {
adventskalender.oeffneTuerchen(input);
System.out.println(Tuerchen.getSpruchByNummer(input));
} else {
System.out.println("Türchen wurde schon geöffnet!");
}
System.out.println();
System.out.println(adventskalender);
}
}
}[/CODE]

Danke euch!

Liebe Grüße und schöne Feiertage dann!
 
Streams sind Datenflüsse. Ein InputStream ist daher ein Datenfluss über den Daten reinkommen. Das kann Netzwerk sein, dass kann eine Datei, dass kann aber auch (wie hier) einfach die Tastatur sein.

Streams sind erstmal nicht viel mehr als eine Abfolge von Bytes und aus einem Inputstream kann man diese lesen: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/InputStream.html

Die Methoden dafür sind aber extrem sperrig und unhandlich.
Ein Reader hingegen wandelt die Bytes in Zeichen. Das, wenn man z.B. Tastureingaben lesen will sinnvoller als Bytes.
Aber ein Reader ist trotzdem zeichen-orientiert und immer noch in seiner nackten Form sperrig.
Da kommt nur der BufferReader ins Spiel, der wiederum Daten buffered (zwischenspeichert). Der bietet dann Methoden um nicht zeichenweise, sondern auch zeilenweise zu lesen.

Reader / Streams können ineinander verschalt werden. Ein InputStreamReader liest aus einem InputStream und stellt es als Reader bereit. Ein BufferedReader liest aus einem beliebigen Reader und stellt es als gebufferten Reader bereit.
 

Zurück
Oben