12.3 Übersicht über wichtige Stream- und WriterReader
 
Alle Datenströme sind als Klassen repräsentiert, die im Paket java.io gesammelt sind. In den ersten Java-Versionen konnten nur Primitive beziehungsweise Bytes und Byte-Arrays geschrieben und gelesen werden. Doch seit Java 1.1 gibt es für Byte-Ströme und Unicodezeichen-Ströme getrennte Klassen. Das macht aus mehreren Gründen Sinn: 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 Bytes überhaupt nichts mit. Ein anderer Vorteil ist die gewonnene Einlesegeschwindigkeit. Die meisten Byte-Ströme lesen und schreiben nur dann ein Zeichen, wenn sie es brauchen.
Die folgenden Tabellen geben eine Übersicht über die wichtigsten Eingabe- und Ausgabe-Klassen.
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 Bytes und Zeichen
|
DataInputStream
|
(keine Entsprechung)
|
Liest Primitive und auch UTF-8
|
FilterInputStream
|
FilterReader
|
Abstrakte Klassse 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
|
(kein 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)
|
PipedOutputStream
|
PipedWriter
|
Schreibt in eine Pipe
|
(keine)
|
StringWriter
|
Schreibt in einen String
|
Neben diesen aufgeführten Klassen zur dateiorientierten Ein- und Ausgabe existiert noch eine Klasse StreamTokenizer, die auf elegante Art die Aufspaltung des Eingabestroms in Token erlaubt.1
12.3.1 Die abstrakten Basisklassen
 
Die komplexen Eingabeklassen wie FileInputStream, ByteArrayOutputStream oder BufferedWriter basieren auf einer abstrakte Klasse OutputSteam, die eine Schnittstelle für einzulesende Bytes ist. Im Allgemeinen können wir vier Kategorien bilden: Klassen zur Ein-/ Ausgabe von Bytes (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.
Klasse für
|
Eingabe
|
Ausgabe
|
Bytes (oder Byte-Arrays)
|
InputStream
|
OutputStream
|
Zeichen (oder Zeichen-Arrays)
|
Reader
|
Writer
|
1
Zurzeit noch nicht implementiert.
|