12.3 Stream-Klassen und Reader/Writer
 
Alle Datenströme sind als Klassen repräsentiert, die im Paket java.io gesammelt sind. In den ersten Java-Versionen konnten nur Primitive beziehungsweise Byte und Byte-Arrays geschrieben und gelesen werden. Seit Java 1.1 gibt es für Byte-Ströme und Unicodezeichen-Ströme getrennte Klassen. Das ist aus mehreren Gründen sinnvoll: Das Einlesen von Unicode-Dateien ist vereinfacht, und Daten müssen nicht auf festgelegten Zeichensätzen arbeiten, ja, wir bekommen vom Konvertieren von Unicode nach Byte überhaupt nichts mit.
12.3.1 Die abstrakten Basisklassen
 
Die komplexen Eingabeklassen wie FileInputStream, FileWriter oder BufferedWriter basieren auf abstrakten Oberklassen. Im Allgemeinen können wir vier Kategorien bilden: Klassen zur Ein-/Ausgabe von Byte (oder Byte-Arrays) und Klassen zur Ein-/Ausgabe von Unicode-Zeichen (oder Strings). Die aufgeführten Klassen geben Methoden vor, die für jede implementierende Klasse von Interesse sind.
Basisklasse für
|
Byte (oder Byte-Arrays)
|
Zeichen (oder Zeichen-Arrays)
|
Eingabe
|
InputStream
|
Reader
|
Ausgabe
|
OutputStream
|
Writer
|
12.3.2 Übersicht über Ein-/Ausgabeklassen
 
Während die abstrakten Basisklassen von keiner konkreten Datenquelle lesen oder in keine Ressource schreiben, implementieren die Unterklassen eine ganz bestimmte Strategie für eine Ressource. So weiß zum Beispiel ein FileWriter, wie für Dateien die abstrakte Klasse Writer zu implementieren ist, also wie Unicode-Zeichen in eine Datei geschrieben werden können.
Die folgenden Tabellen vermitteln einen Überblick über die wichtigsten Eingabe- und Ausgabe-Klassen.1
Tabelle 12.1
Wichtige Eingabeklassen
Byte-Stream-Klasse für
die Eingabe
|
Zeichen-Stream-Klasse
für die Eingabe
|
Beschreibung
|
InputStream
|
Reader
|
Abstrakte Klasse für Zeicheneingabe und Byte-Arrays
|
BufferedInputStream
|
BufferedReader
|
Puffert die Eingabe
|
LineNumberInputStream
|
LineNumberReader
|
Merkt sich Zeilennummern beim Lesen
|
ByteArrayInputStream
|
CharArrayReader
|
Liest Zeichen-Arrays oder
Byte-Arrays
|
(keine Entsprechung)
|
InputStreamReader
|
Wandelt Byte-Stream in Zeichen-Stream um, Bindeglied zwischen Byte und Zeichen
|
DataInputStream
|
(keine Entsprechung)
|
Liest Primitive und auch UTF-8
|
FilterInputStream
|
FilterReader
|
Abstrakte Klasse für gefilterte Eingabe
|
PushbackInputStream
|
PushbackReader
|
Erlaubt, gelesene Zeichen wieder in den Stream zu geben
|
PipedInputStream
|
PipedReader
|
Liest von einem
PipedWriter oder
PipedOutputStream
|
StringBufferInputStream unter 1.1 nicht mehr erwünscht
|
StringReader
|
Liest aus Strings
|
SequenceInputStream
|
(keine Entsprechung)
|
Verbindet zwei andere InputStreams
|
TelepathicInputStream
|
TelepathicWriter
|
Überträgt Daten mittels
Telepathie5
|
Tabelle 12.2
Wichtige Ausgabeklassen
Byte-Stream-Klasse für die
Ausgabe
|
Zeichen-Stream-Klasse für die Ausgabe
|
Beschreibung
|
OutputStream
|
Writer
|
Abstrakte Klasse für Zeichenausgabe oder Byte-Ausgabe
|
BufferedOutputStream
|
BufferedWriter
|
Ausgabe des Puffers, nutzt passendes Zeilenendezeichen
|
ByteArrayOutputStream
|
CharArrayWriter
|
Schreibt Arrays
|
DataOutputStream
|
(keine Entsprechung)
|
Schreibt Primitive und auch UTF-8
|
(keine Entsprechung)
|
OutputStreamWriter
|
Übersetzt Zeichen-Stream in Byte-Stream
|
FileOutputStream
|
FileWriter
|
Schreibt in eine Datei
|
PrintStream
|
PrintWriter
|
Schreibt Werte (oder Objekte) als Strings
|
PipedOutputStream
|
PipedWriter
|
Schreibt in eine Pipe
|
(keine Entsprechung)
|
StringWriter
|
Schreibt in einen String
|
1 Ist noch in der Entwicklung.
|