Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


10.2

Streams seit JDK 1.1


Die Streams, wie sie im letzten Abschnitt verwendet wurden, sind alle Byte-orientiert, d. h. als kleinste Ein- und Ausgabeeinheit wird ein Byte verwendet. Dadurch können Probleme enstehen, wenn in einer Java-Anwendung Text verarbeitet wird. In Java werden Strings intern im Unicode-Format gespeichert, wodurch ein Zeichen 16 Bit (2 Byte) belegt.

Auf verschiedenen Plattformen werden unterschiedliche Zeichensätze für die Kodierung von Text verwendet. Ein solcher Zeichensatz besitzt sehr oft 256 Einträge und ordnet jedem Eintrag ein Zeichen zu. Ein Zeichen wird also durch einen Index innerhalb eines Zeichensatzes bestimmt. Dieser Index kann bei 256 Zeichen durch genau ein Byte dargestellt werden.

Zwischen den einzelnen Zeichensätzen gibt es folgende Unterschiede: Beim Einlesen und Speichern von Text mit einer Java-Anwendung ist deshalb immer eine Konvertierung notwendig. Jedes Zeichen muss beim Laden bzw. bei der Eingabe in Unicode konvertiert werden. Beim Speichern bzw. bei der Ausgabe muss eine Konvertierung von Unicode in den Zeichensatz der entsprechenden Plattform erfolgen. Im JDK 1.0 wurde diese Konvertierung nicht richtig ausgeführt. Bei der Ausgabe wurde einfach das höhere Byte des Unicode-Zeichens ohne Berücksichtigung des Zeichensatzes der Plattform verworfen. Dies entspricht einer Konvertierung in iso-latin-1.

Deshalb wurden mit dem JDK 1.1 so genannte Reader- und Writer-Klassen eingeführt. Sie sind genauso wie alle anderen Streams im Paket java.io enthalten. Die Klasse Reader stellt das Analogon zum InputStream dar, die Klasse Writer zum OutputStream. Im Paket java.io sind ebenfalls viele weitere Klassen definiert, die von Reader- und Writer abgeleitet sind und dem Programmierer eine einfachere Ein- und Ausgabe ermöglichen. Dies ist auch notwendig, da Reader und Writer genau wie InputStream und OutputStream, nur elementare Ein- und Ausgabe-Methoden zur Verfügung stellen, deren Benutzung für den Programmierer recht mühsam ist.

Im Gegensatz zu InputStream und OutputStream, die die Basis für die Ein- und Ausgabe in Java 1.0 darstellen, arbeiten Reader und Writer nicht auf Byte-Basis, sondern besitzen als kleinste Ein- und Ausgabeeinheit ein 16-Bit-Unicode-Zeichen. Die Methoden der Reader- und Writer-Klassen sind meist identisch mit den Methoden der Klassen InputStream und OutputStream, mit dem Unterschied, dass die Parameter und Ergebnistypen nicht vom Typ byte, sondern vom Typ char sind.

In der Funktionalität sind die neuen Reader- und Writer-Klassen den Streams in Java 1.0 allerdings ebenbürtig. So wurde für fast jeden InputStream, der im Paket java.io enthalten ist, eine entsprechende Reader-Klasse hinzugefügt. Analoges gilt für die OutputStreams und die Writer-Klassen.

Neben den neuen Reader- und Writer-Klassen können die herkömmlichen Streams weiter verwendet werden. Das ist auch sinnvoll, da sprachspezifische Zeichendarstellung nur bei Text eine Rolle spielt. Werden z. B. binäre Daten verarbeitet, sind sicherlich die Byte-basierten Streams vorzuziehen.

Ein anderer Grund für die weitere Verwendungsmöglichkeit der Byte-orientierten Streams ist die Abwärtskompatibilität zum JDK 1.0.

Die Standard-Streams, wie sie im letzten Abschnitt beschrieben wurden, sind von dieser eben angesprochenen Änderung nicht betroffen. Sie arbeiten nach wie vor auf Byte-Basis.


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.