Java Streams Erklärung InputStream?

2 Antworten

Vorab: das ist eine Anwendung des Decorator-Patterns, das in java.io recht viel einsetzt wird.

Jede dieser Klassen stöpselt in eine andere (aber mit demselben Interface) und kann dann zusätzliche Dinge: schau dir die API-Dokumentation an. Beispielsweise kann nur ein BufferedReader zeilenweise lesen, mit der readLine()-Methode. Aber er muss nicht wissen, ob die Daten aus einer Datei oder vom Netzwerk kommen.

Der Code illustriert das Prinzip ganz gut, würde aber in produktiver Software so nicht verwendet werden, wenn man einfach eine Datei zeilenweise lesen will. Dafür gibt es viel bequemere Methoden (siehe Klasse Files).

Habe kurz in die Doku geschaut und verstehe es so:

FileInputStream: Liest Bytes aus einer Datei.

InputStreamReader: Wandelt die Bytes in Textzeichen um. Kann aber nur ein Byte nach dem anderen auslesen.

BufferedReader: Liest mehrere Bytes auf einmal und speichert sie in einem Zwischenspeicher. Das ist effizienter.


flyaquarius  20.04.2023, 09:59

Übrigens gibt es einen bequemeren Weg eine Textdatei einzulesen und zwar mit der Klasse Scanner. Diese ist zwar nicht so schnell wie ein BufferedReader, aber oft spielt das keine Rolle:

Scanner scanner = new Scanner(new File("filename"));
while (scanner.hasNextLine()) {
   String line = scanner.nextLine();
   // process the line
}
cmcta  20.04.2023, 12:53
@flyaquarius

Der bequemste Weg sind immer noch die diversen statischen Methoden in File, etwa readLines() oder lines().

RedDevil1982 
Beitragsersteller
 20.04.2023, 14:50

"Habe kurz in die Doku geschaut"

Welche Doku meinst du hier? Link bitte.