Was versteht man unter Objektserialisierung?



  • Die Frage steht im Thema



  • Das Abspeichern eines Objekts (z.B. ?) in eine Datei (binär) so dass man es wieder einlesen kann 😃



  • Hallo

    Unter Objektserialisierung versteht man, das man Objekte die zur Laufzeit entstanden sind abspeichert z.B zu übertragen über Telefonleitungen oder zum speichern auf die Platte.



  • Um das ganze ein wenig wissenschaftlich aufzuarbeiten (und damit man diesen Thread auch in die FAQ verschieben kann) hier noch ein paar Worte dazu aus "Netzwerke unter Java":

    [...]Bei der Objektserialisierung werden Objekte über einen Stream verschickt. Dabei müssen die Objekte zunächst in einen Datenstrom umgewandelt werden. Darüber muss sich der Java-Programmierer aber meist keine Gedanken machen. Dies übernehmen die beiden oben genannten Klassen.

    ObjectOutputStream wandelt ein Objekt in einen Datenstrom um, während ObjectInputStream diesen wieder in ein Objekt umwandelt.
    Eine Instanz dieser beiden Klassen kann beliebige Input- und Output-Streams erweitern. Somit kann überall, wo mit Streams gearbeitet wird, die Objektserialisierung eingesetzt werden, was einen vielfältigen Einsatzbereich ermöglicht.

    Frage: Lässt sich jedes Objekt serialisieren?
    Es ist nicht immer wünschenswert, dass sich jedes Objekt serialisieren lässt. Daher gibt es die Möglichkeit zu bestimmen, welche Klassen serialisierbar sind. Man entscheidet also, ob alle Instanzen einer Klasse serialisierbar sind, und nicht, ob spezielle Instanzen serialisierbar sind.

    Soll eine Klasse serialisierbar sein, so muss sie das leere Interface Serializable oder dessen Erweiterung Externalizableimplementieren:

    [java]public class MySerializableClass implements Serializable {...}[/code]

    Man muss also keine zusätzlichen Methoden schreiben, um eine Klasse serialisierbar zu machen, da das Interface leer ist.

    Implementiert man jedoch die Erweiterung Externalizable, so muss man zwei Methoden implementieren, die den Serialisierungsprozess komplett festlegen.

    Schützen von Informationen
    ------------------------------
    Nicht alle Informationen eines Objektes können serialisiert werden. Wenn eine Member-Variable der Klasse als static deklariert ist, so muss sie nicht übertragen werden, da sie keine Objektvariable ist, sondern eine Klassenvariable. Es kann aber auch durchaus sinnvoll sein, dass nicht alle Informationen des Objektes übertragen werden. Um dies zu bewerkstelligen werden Member mit dem Schlüsselwort transient markiert. Transiente Membervariablen werden nicht in den Serialisierungsprozess mit einbezogen. Dies kann zum Beispiel sinnvoll sein, wenn ein Objekt ein Passwort enthält und dieses Passwort nicht mitübertragen werden soll. [...]


Anmelden zum Antworten