next up previous contents index
Next: Grafische Benutzungsschnittstellen Up: Ein-/Ausgabe Previous: Zerlegung von Strömen in

Ausgabe von Objekten (Serialisierung)

   

Serializable ist ein (``Marker''-) Interface in java.io, das dazu benutzt wird, Klassen zu kennzeichnen, von denen Objekte in Binärdateien abgelegt werden sollen (neu in Java1.1  ).

Serialisierung ist wichtig in Client/Server Anwendungen, für Cut-and-Paste, für Software-Komponenten (Beans) und die Speicherung bereits initialisierter Applets.

Beispiel: Serialisierung von baumstrukturierten Objekten

Eine Klasse für Suchanfragen

Markiert als Serializable

import java.io.*;

abstract class SuchAnfrage 
implements Serializable
{abstract public void print();
}

Ein einzelner Suchbegriff

import java.io.*;
public class Begriff extends SuchAnfrage
{ String begr;
  Begriff(String b)
  { begr = b;
  }
  public void print()
  { System.out.print(begr + " ");
  }
}

Und-Verknüpfung von Suchbegriffen

import java.io.*;
public class Und extends SuchAnfrage
{ SuchAnfrage sl;
  SuchAnfrage sr;
  public Und(SuchAnfrage sl, 
             SuchAnfrage sr)
  { this.sl = sl;
    this.sr = sr;
  }
  public void print()
  { System.out.print("( ");
    sl.print();
    System.out.print("UND ");
    sr.print();
    System.out.print(") ");
  }
}

Oder-Verknüpfung von Suchbegriffen

import java.io.*;
public class Oder extends SuchAnfrage
{ SuchAnfrage sl;
  SuchAnfrage sr;
  public Oder(SuchAnfrage sl, 
              SuchAnfrage sr)
  { this.sl = sl;
    this.sr = sr;
  }
  public void print()
  { System.out.print("( ");
    sl.print();
    System.out.print("ODER ");
    sr.print();
    System.out.print(") ");
  }
}

Negation von Suchbegriffen

import java.io.*;
public class Nicht extends SuchAnfrage
{ SuchAnfrage s;
  Nicht(SuchAnfrage s)
  { this.s = s;
  }
  public void print()
  { System.out.print("NICHT ");
    s.print();
  }
}

Das Hauptprogramm: Serialisierung von Suchbegriffen

Zunächst wird eine Suchanfrage konstruiert:

  (Java UND NICHT (C++ ODER Smalltalk))

import java.io.*;

public class  Main
{ public static void main(String [] a)
    throws IOException,
           ClassNotFoundException
  { SuchAnfrage s;
    s = new Und(
           new Begriff("Java"),
           new Nicht(
              new Oder(
                 new Begriff("C++"),
                 new Begriff("Smalltalk")
                 )
              )
           );

    // Objekte rausschreiben
    ObjectOutputStream out = 
        new ObjectOutputStream(
           new FileOutputStream("such.dat"));
    out.writeObject(s); 
    out.close();
    
    // Objekte einlesen
    ObjectInputStream in =
      new ObjectInputStream(
        new FileInputStream("such.dat"));

    SuchAnfrage wiederda = 
          (SuchAnfrage) in.readObject();
    wiederda.print();
    System.out.println();
  }
}

 


next up previous contents index
Next: Grafische Benutzungsschnittstellen Up: Ein-/Ausgabe Previous: Zerlegung von Strömen in

Peter Pfahler, 1997