Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 3. Auflage
 <<    <     >    >>   API  Kapitel 18 - Character-Streams

18.1 Allgemeine Konzepte



Als Sprache, die nicht nur das Erstellen vorwiegend grafikorientierter Web-Applets ermöglicht, sondern auch zur Entwicklung von eigenständigen Anwendungen eingesetzt werden soll, bietet Java eine umfangreiche Bibliothek zum sequentiellen und wahlfreien Zugriff auf Dateien und zur Verwaltung von Verzeichnissen. Während der wahlfreie Zugriff ähnlich wie in anderen Sprachen gelöst ist, wurden bei der sequentiellen Ein-/Ausgabe neue Wege beschritten. Die dafür verwendeten Klassen realisieren das aus anderen Sprachen bekannte Konzept der Streams auf der Basis objektorientierter Techniken.

Ein Stream wird dabei zunächst als abstraktes Konstrukt eingeführt, dessen Fähigkeit darin besteht, Zeichen auf ein imaginäres Ausgabegerät zu schreiben oder von diesem zu lesen. Erst konkrete Unterklassen binden die Zugriffsroutinen an echte Ein- oder Ausgabegeräte, wie beispielsweise an Dateien, Strings oder Kommunikationskanäle im Netzwerk.

Das Stream-Klassenkonzept von Java bietet die Möglichkeit, Streams zu verketten oder zu schachteln. Die Verkettung von Streams ermöglicht es, mehrere Dateien zusammenzufassen und für den Aufrufer als einen einzigen Stream darzustellen. Das Schachteln von Streams erlaubt die Konstruktion von Filtern, die bei der Ein- oder Ausgabe bestimmte Zusatzfunktionen übernehmen, beispielsweise das Puffern von Zeichen, das Zählen von Zeilen oder die Interpretation binärer Daten. Beide Konzepte sind mit normalen Sprachmitteln realisiert und können selbst erweitert werden. Es ist ohne weiteres möglich, eigene Filter zu schreiben, die den Ein- oder Ausgabestrom analysieren und anwendungsbezogene Funktionalitäten realisieren.

Alle Klassen zur Dateiein- und -ausgabe befinden sich im Paket java.io. Um sie zu verwenden, sollte daher folgende Anweisung an den Anfang eines Programms gestellt werden:

import java.io.*;

Bis zur Version 1.0 des JDK gab es nur Byte-Streams in Java. Wesentliches Merkmal eines Byte-Streams war es dabei, daß jede einzelne Transporteinheit 8 Bit lang war (also ein einzelnes Byte). Während damit die Kompatibilität zu Textdateien, die mit konventionellen Programmiersprachen erstellt wurden oder von diesen gelesen werden sollten, gewährleistet war, gab es naturgemäß Probleme bei der Umwandlung in die 16 Bit langen Unicode-Zeichen, die innerhalb von Java zur Zeichendarstellung benutzt werden. Zudem war die Abbildung zwischen Bytes und Characters eher unsystematisch gelöst und bot wenig Unterstützung für die Anpassung an unterschiedliche Zeichensätze und nationale Gegebenheiten.

All dies hat die JDK-Designer dazu bewogen, das Konzept der Streams in der Version 1.1 zu überdenken und die neue Gruppe der Character-Streams einzuführen. Character-Streams verwenden grundsätzlich 16 Bit lange Unicode-Zeichen und arbeiten daher besser mit den String- und Zeichentypen von Java zusammen. Um zu den 8-Bit-Zeichensätzen in externen Dateien kompatibel zu bleiben, wurden explizite Brückenklassen eingeführt, die Character-Streams in Byte-Streams überführen und umgekehrt. Diese bieten nun auch die Möglichkeit der Anpassung an spezielle Zeichensätze und lokale Besonderheiten.

Wir werden uns in diesem Kapitel ausschließlich mit den Character-Streams beschäftigen, weil sie für die Verarbeitung von textbasierten Streams wichtig sind. Byte-Streams und Brückenklassen werden im nächsten Kapitel erläutert. Wir werden dort sehen, daß es - selbst im UNICODE-Zeitalter - eine ganze Reihe von Anwendungen für byteorientierte Dateizugriffe gibt.

Die Beispiele in diesem Kapitel wurden hauptsächlich unter Windows entwickelt und getestet, und mitunter kommen darin windows-spezifische Besonderheiten vor. So wird als Zeilenendezeichen "\r\n" verwendet, obwohl unter UNIX "\n" und auf dem Mac "\r" gebräuchlich ist. Am besten ist es natürlich, das System-Property line.separator zu verwenden (siehe Abschnitt 16.3.1). Auch bei den Pfadseparatoren gibt es Unterschiede. Während unter Windows der Backslash "\" verwendet wird, ist es unter UNIX der Slash "/". Mit dem System-Property file.separator kann auch auf diese Eigenschaft portabel zugegriffen werden.

 Hinweis 


 Titel   Inhalt   Suchen   Index   DOC  Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0.1
 <<    <     >    >>   API  © 1998-2003 Guido Krüger, http://www.javabuch.de