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(); } }