Literatur

Streams Allgemein

In Java gibt es neben der einfachen Ein-/Ausgabe über die Kommandozeile auch noch komplexere Ein- und Ausgaben. Die Basis für eingehende Datenströme bildet die Klasse InputStream, während OutputStream die Basisklasse für ausgehende Datenströme darstellt.  Streams werden oft verwendet, um Daten in eine Datei zu schreiben bzw. um eine Datei auszulesen. Weitere Verwendungsmöglichkeiten sind z.B. die Druckeranbindung, aber auch die Client-Server-Kommunikation.

Werte, die in den OutputStream geschrieben werden, müssen in derselben Reihenfolge von einem InputStream wieder eingelesen werden. Zu den meisten OutputStream-Klassen gibt es eine gleichnamige InputStream-Klasse  (z.B. FileOutputStream und FileInputStream). Diese sollten auch nur zusammen verwendet werden. Sollte dies nicht der Fall sein, tritt normalerweise eine Exception auf.

Als Vorraussetzung, dass selbstgeschriebene Klassen in einen OutputStream geschrieben werden können, muss diese Klasse und die jeweiligen intern verwendeten Klassen das Interface Serializable implementieren. Erst dann können Objekte der Klasse persistent gespeichert (serialisiert) werden.

Schauen wir uns dazu einmal ein Beispiel an.

// Klasse Punkt, die das Interface Serializable implementiert
class Punkt implements Serializable
{
    private int x=0;
 
    public int getX()
    {
         return x;
    }
 
    public void setX(int xwert)
    {
         x=xwert;
    }
}

Objekte unserer Klasse Punkt können nun in einen OutputStream geschrieben werden.  Sie werden sich jetzt vielleicht wundern, warum Sie hier keine weiteren Methoden implementieren müssen, wie es meistens der Fall ist, wenn Sie Interfaces implementieren. Das ist ganz einfach: Mit diesem leeren Interface werden einfach nur die Klassen gekennzeichnet, die serialisierbar sind, damit die JVM weiß, dass sie Objekte dieser Klasse persistent speichern (serialisieren) darf.

In den  Unterkapiteln schauen wir uns die Verwendung eines Output- bzw. InputStreams genauer an.