Ein- und Ausgabe über Streams

 

Duke surft...

Programme müssen Daten von unterschiedlichen Datenquellen lesen können und sie müssen Daten auf unterschiedliche Datenziele schreiben können. Hierbei kann es sich um die unterschiedlichsten Quellen und Ziele handeln:

  • Konsoleneingabe
  • Konsolenausgabe
  • Dateien auf dem Rechner
  • Dateien auf entfernten Rechnern (z. Bsp. dem Internet)
  • Quellen und Senken auf anderen Rechnern

 

 Alle Ein- und Ausgaben in Java laufen "stromorientiert" ab, sie folgen dem "Stream-Konzept".

Definition

Ein Stream ist die Verbindung zwischen einer Datenquelle und einem Datenziel.

Die Verbindung erfolgt immer in nur eine Richtung (von der Quelle zum Ziel).

Um Eingaben in Java zu erhalten muß man einen Strom öffnen der mit einer Datenquelle verbunden ist und anschließend die Daten sequentiel lesen.

Für Ausgaben muß man einen Datenstrom zu einem Datenziel öffnen, dann die Daten sequentiell schreiben.

Dieses Konzept ist einem Wasserschlauch ähnlich: Sie benötigen jemand der das Wasser einspeißt und einen anderen Konsumenten der das Wasser wieder entnimmt.

Kategorien von Streams

In Java werden zwei Kategorien unterschieden:

  • Character-Streams: Transportieren 16 Bit Daten. Sie arbeiten mit dem Javatyp char der Unicodezeichen darstellt
    • Ihre Basisfunktionalität wird durch die abstrakten Klassen Reader und Writer bereitgestellt
  • Byte-Stream: Transportieren 8 Bit Daten. Sie arbeiten mit dem Javatyp byte.

Wichtig: Alle Klassen die von diesen vier Basisklassen spezialisiert werden haben als Endung den Namen der abstrakten Klasse!

Bsp.: Bei der Klasse FileWriter handelt handelt es sich um einen Ausgabestrom auf Dateien.

Bsp.: Bei der Klasse FileWriter handelt handelt es sich um einen Ausgabestrom auf Dateien.

Frage: Verwaltet er Bytes oder Zeichen?

Interessant:

Man kann Streams (Datenströme) verketten! Das bedeutet, dass ein Streamsobjekt in der Regel einen anderen Stream als Eingabe oder Ausgabe akzeptiert. Hiermit kann man Datenströme elegant umkonvertieren.

Duke mit Stromstecker

 

java.nio und mehr...

Duke auf Sofa

Seit der Version JDK 1.4 gibt es in Java das Paket java.nio mit einer Reihe neuer Klassen. Diese Paket ist nicht Gegenstand der Vorlesung.

In diesem Abschnitt werden nur einige wenige, ausgewählte Methoden der Klassen vorgestellt. Bitte benutzen Sie die Hyperlinks zur Java API Dokumention und einen vollständigen Überblick zu bekommen.