Java 1
  • Home
  • Tutorials
    • Hello World
      • Download
      • Installation unter Windows
      • Installation unter Linux
      • Das Hello World Programm
      • Mehr Java
    • Java Konsole
      • Java Konsole Testen
    • Basic Java
      • Java Programme
        • Die Klasse
        • Datentypen
        • Null
        • Casten
        • Operatoren
        • Kontrollstrukturen
        • Arrays
        • Aufgaben
      • Objektorientierte Konzepte
        • Hallo Fenster
        • Objekte einer Klasse
        • Vererbung
        • Interfaces
      • Alles über Klassen
        • Abstrakte Klassen
        • Methoden überschreiben
        • Super
        • Final
        • Innere Klassen
        • Anonyme Klassen
        • Enumerations
      • You're just an object
        • Sichtbarkeit
        • Druckdarstellung
        • Gleichheit
        • Klonen
        • Die Class
        • Serialisierung
    • Java Api
      • Dokumentation
      • Strings
      • Wrapper Klassen
      • System und Runtime
      • Math
      • Exceptions
      • IO
      • Sammlungsklassen
      • AWT und Swing
      • Alle Komponenten
      • Applets
      • Threads
      • Jar
      • Classpath
    • JSP und Servlets
      • Meine erste JSP
        • Downloads
        • Installation unter Windows
        • Installation unter Linux
        • Admin und Manager
        • Webapplication
      • JSP
        • Java Code in HTML einbinden
        • Das HTTP Request - Response Modell
        • Request und Response Objekte
        • Auswerten von Formulardaten
        • Aufgaben
      • Beans
        • Die Session
        • Weitere vordefinierte Objekte
        • Java-Beans
        • Beans programmieren
        • Java-Beans in JSP nutzen
        • Aufgaben
      • Servlets
        • Nutzen der Servlets
        • Servlets programmieren
        • Servlets auf dem Server einrichten
        • Servlets mit JSP
        • Servlets includen
        • Aufgaben
      • Webapplikation
        • Filter
        • Initialisierungsparameter
        • Error Pages
        • Passwortgeschützte Verzeichnisse
        • Bibliotheken nutzen
        • Eine Webapplikation deployen
        • Ausblick: Wie geht's weiter?
        • JSP-Tags Syntaxreferenz
        • Aufgaben
  • Code
    • Web
      • Datenbankverbindungen mit Tomcat
      • Texte richtig encoden
      • HTTPS mit Tomcat
      • HTML Encoden mit Javascript
    • Java
      • Print F
      • Ein generischer Poolbuilder
      • Native Bibliotheken
      • Unique Ids
    • Java FX
      • Balls
      • Hearts
      • Planner
    • Java ME
      • The Next Big Thing
    • System
      • Vi Kommandos
  • Sidemap
  • Impressum
  • Hilfe
Home > Tutorials > Basic Java > You're just an object > Serialisierung
  • Home
  • Tutorials
    • Hello World
    • Java Konsole
    • Basic Java
      • Java Programme
      • Objektorientierte Konzepte
      • Alles über Klassen
      • You're just an object
        • Sichtbarkeit
        • Druckdarstellung
        • Gleichheit
        • Klonen
        • Die Class
        • Serialisierung
    • Java Api
    • JSP und Servlets
  • Code
  • Sidemap
  • Impressum
  • Hilfe

Objektserialisierung

Hinweis: Zum Verständnis dieses Abschnittes sind Kenntnisse der Datei-Ein- und Ausgabe erforderlich. Bitte bearbeiten Sie zunächst das Kapitel „Ein- und Ausgabe", falls Sie es noch nicht getan haben.

Die Objektserialisierung erlaubt es, ein Objekt in seinem aktuellen Zustand zu speichern. Das bedeutet, Sie speichern automatisch alle Werte der Felder dieses Objekts. Das Objekt kann dann später oder auch in einer anderen VM mit denselben Werten wieder hergestellt werden.

Grundsätzlich sind alle Java-Klassen serialisierbar, die das Interface java.io.Serializable implementieren und deren Felder auch serialisierbar sind. Das aber sind eben alle Klassen, die Serializable implementieren sowie alle primitiven Datentypen.

Serialisierbar sind beispielsweise Objekte der Klasse java.io.File, denn sie enthalten Informationen, die auch morgen noch sinnvoll verwendet werden können. Nicht serialisierbar ist dagegen ein Objekt der Klasse java.io.FileInputStream. Ein Stream kann nicht dauerhaft gespeichert werden, denn er existiert nur, solange er nicht geschlossen wird. Dann ist er für immer verloren und es muss in jedem Fall ein neuer Stream erzeugt werden.

In Java gibt es zwei Möglichkeiten der Serialisierung: Zum ersten können Sie eine binäre Repräsentanz eines Objektes speichern, zum zweiten können Sie Objekte mittels XML persistent machen. Das folgende kleine Programm stellt beide Methoden vor. Bitte studieren Sie den Quellcode, insbesondere die actionPermformed –Methode, die die Serialisierung ausführt:

Das Schreiben eines serialisierbaren Objekts (dataBean) in eine Binärdatei (file) geschieht mittels eines java.io.ObjectOutputStreams. Wie bei jeder IO-Operation können diverse Exceptions geworfen werden.

ObjectOutputStreamout =new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(dataBean);

Und das entsprechende Lesen des Objekts:

ObjectInputStream in =newObjectInputStream(new FileInputStream(file));
dataBean = (Serializer.DataBean) in.readObject();

Das Serializable Interface, das die Klasse „DataBean“ implementieren muss, ist ein reines Zeiger-Interface, d.h. es definiert keine Methoden. Wenn die folgenden Methoden allerdings programmiert werden, so werden sie zum Schreiben bzw. lesen des Objekts benutzt. Das sollten Sie allerdings nur tun, wenn Sie mit dem Standardverhalten unzufrieden sind:

private void writeObject(java.io.ObjectOutputStream out)
private void readObject(java.io.ObjectInputStream in)

Innerhalb dieser Methoden schreiben Sie dann in den Stream bzw. lesen aus dem Stream, den Sie übergeben bekommen.

Die XML Serialisierung funktioniert entsprechend. Allerdingswerden hier nur Felder berücksichtigt, für die Getter und Setter – Methoden vorhanden sind. Getter und Setter Methoden ergeben sich aus der Java – Beans Spezifikation, und die XMLSerialisierung funktioniert eigentlich nur mit Java - Beans. Beans werden im Kurs („JSP und Servlets mit Tomcat“) behandelt.

XMLEncoder out =newXMLEncoder(
newBufferedOutputStream(new FileOutputStream(file)));
out.writeObject(dataBean);

Der XML-Encoder ist im Paket java.beans.*. Der Code unterscheidet sich kaum von dem oben vorgestelltem. Schließlich das Lesen aus XML:

XMLDecoder in =
new XMLDecoder(newBufferedInputStream(new FileInputStream(file)));
dataBean = (Serializer.DataBean) in.readObject();

Die XML-Serialisierung ist langsamer als die binäre, erzeugtaber kleinere Dateien, zumindest solange die meisten Werte der Bean der Voreinstellung entsprechen; die werden dann nämlich gar nicht geschrieben. Der große Vorteil der XML Serialisierung ist natürlich, dass die serialisierten Objekte manuell editiert werden können.

Wenn innerhalb des zu serialisierenden Objekts ein Feld nicht serialisiert werden soll, beispielsweise weil es nicht serialisierbar ist, müssen Sie es als transient markieren:

private transient FileInputStream in=null;

Aufgabe: DynamicSerial

Erweitern Sie die Klasse DynamicLoading, sodass das dynamischerzeugte Panel auf Knopfdruck serialisiert und wieder geladen werdenkann. Verwenden Sie einen Serialisierungsmechanismus ihrer Wahl.
Musterlösung: java1.aufg.kap_4.DynamicSerial

« Die Class
You're just an object
 
Show/Hide Footer Actions

Kommentare:

Sie müssen angemeldet sein um eine Nachricht zu erstellen. Anmelden »
© 2012 Java 1. Alle Rechte vorbehalten.
Anmelden
concrete5 - open source CMS
Theme by Site5 / Mnkras.