Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (2. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Java ist auch eine Insel (2. Auflage)
gp Kapitel 12 Datenströme und Dateien
  gp 12.1 Dateien und Verzeichnisse
  gp 12.2 Dateien mit wahlfreiem Zugriff
    gp 12.2.1 Ein RandomAccessFile öffnen
    gp 12.2.2 Aus dem RandomAccessFile lesen
    gp 12.2.3 Hin und her in der Datei
    gp 12.2.4 Die Länge des RandomAccessFile
  gp 12.3 Übersicht über wichtige Stream- und WriterReader
    gp 12.3.1 Die abstrakten Basisklassen
  gp 12.4 Eingabe- und Ausgabe-Klassen: InputStream und OutputStream
    gp 12.4.1 Die Klasse OutputStream
    gp 12.4.2 Ein Datenschlucker
    gp 12.4.3 Die Eingabeklasse InputStream
    gp 12.4.4 Anwenden der Klasse FileInputStream
    gp 12.4.5 Anwendung der Klasse FileOutputStream
    gp 12.4.6 Kopieren von Dateien
    gp 12.4.7 Daten filtern durch FilterInputStream und FilterOutputStream
    gp 12.4.8 Der besondere Filter PrintStream
    gp 12.4.9 System.in und System.out
    gp 12.4.10 Bytes in den Strom mit ByteArrayOutputStream
    gp 12.4.11 Ströme zusammensetzen mit SequenceInputStream
  gp 12.5 Ressourcen wie Grafiken aus dem Klassenpfad und aus Jar-Archiven laden
  gp 12.6 Die Unterklassen von Writer
    gp 12.6.1 Die abstrakte Klasse Writer
    gp 12.6.2 Datenkonvertierung durch den OutputStreamWriter
    gp 12.6.3 In Dateien schreiben mit der Klasse FileWriter
    gp 12.6.4 StringWriter und CharArrayWriter
    gp 12.6.5 Writer als Filter verketten
    gp 12.6.6 Gepufferte Ausgabe durch BufferedWriter
    gp 12.6.7 Ausgabemöglichkeiten durch PrintWriter erweitern
    gp 12.6.8 Daten mit FilterWriter filtern
  gp 12.7 Die Klassen um Reader
    gp 12.7.1 Die abstrakte Basisklasse Reader
    gp 12.7.2 Automatische Konvertierungen mit dem InputStreamReader
    gp 12.7.3 Dateien lesen mit der Klasse FileReader
    gp 12.7.4 StringReader und CharArrayReader
  gp 12.8 Schachteln von Eingabe-Streams
    gp 12.8.1 Gepufferte Eingaben mit der Klasse BufferedReader
    gp 12.8.2 LineNumberReader zählt automatisch Zeilen mit
    gp 12.8.3 Eingaben filtern mit der Klasse FilterReader
    gp 12.8.4 Daten zurücklegen mit der Klasse PushbackReader
  gp 12.9 Kommunikation zwischen Threads mit Pipes
    gp 12.9.1 PipedOutputStream und PipedInputStream
    gp 12.9.2 PipedWriter und PipedReader
  gp 12.10 Datenkompression
    gp 12.10.1 Datenströme komprimieren
    gp 12.10.2 Zip-Archive
  gp 12.11 Prüfsummen
    gp 12.11.1 Die Schnittstelle Checksum
    gp 12.11.2 Die Klasse CRC32
    gp 12.11.3 Die Adler32-Klasse
  gp 12.12 Persistente Objekte und Serialisierung
    gp 12.12.1 Objekte speichern
    gp 12.12.2 Objekte lesen
    gp 12.12.3 Die Schnittstelle Serializable
    gp 12.12.4 Tiefe Objektkopien
    gp 12.12.5 Felder sind implizit Serializable
    gp 12.12.6 Versionenverwaltung und die SUID
    gp 12.12.7 Beispiele aus den Standard-Klassen
    gp 12.12.8 Serialisieren in XML-Dateien
    gp 12.12.9 JSX (Java Serialization to XML)
    gp 12.12.10 XML-API von Sun
  gp 12.13 Die Logging-API


Galileo Computing

12.3 Übersicht über wichtige Stream- und WriterReader  downtop

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 Telepathie

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.


Galileo Computing

12.3.1 Die abstrakten Basisklassen  toptop

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.





Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de