Objektserialisierung

Ähnliche Dokumente
Kapitel 8: Serialisierbarkeit

Informatik B. Vorlesung 14 Serialisierung, Autoboxing. Dr. Ralf Kunze

Programmieren 2 11 Objekt-Serialisierung

Begriffe. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 15: Serialisierung, Persistenz, Versionierung. Begriffe.

Java Input/Output System (IO)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Programmieren 2 Selbststudium Semesterwoche 6

Java I/O, Serialisierung und Netzwerkprogrammierung

Dynamische Datenstrukturen Jiri Spale, Algorithmen und Datenstrukturen - Dynamische Datenstrukturen 1

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Programmieren in Java -Eingangstest-

JAVA für Einsteiger. Streams und Dateien. eden market Autor: Norman Lahme

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz. Institut für Angewandte Informatik

CLIENT SERVER. 1 Model-View-Controller (2) 2 Observer. 1 Model-View-Controller. "elements of reusable design" Beispiele:

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS16) Java RMI 1 1

Programmieren I. Kapitel 15. Ein und Ausgabe

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

12 Abstrakte Klassen, finale Klassen und Interfaces

Info B VL 11: Innere Klassen/Collections

II.4.4 Exceptions - 1 -

Javakurs für Anfänger

UNIVERSITÄT SIEGEN Fachbereich 12, Elektrotechnik und Informatik Fachgruppe Betriebssysteme / verteilte Systeme

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Methoden und Wrapperklassen

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Info B VL 8: Abstrakte Klassen & Interfaces

Kapitel 6. Vererbung

Große Übung Praktische Informatik 1

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

Objektorientierte Programmierung Studiengang Medieninformatik

Implementieren von Klassen

Kapitel 6. Vererbung

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Datenströme in Java. Zeichenkonvertierung

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Algorithmen und Datenstrukturen

Kapitel 6. Vererbung

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Programmieren 1 09 Vererbung und Polymorphie

Einstieg in die Informatik mit Java

Programmieren in Java

Java: Vererbung. Teil 3: super()

Objektorientierte Programmierung

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Ausnahmebehandlung in Java

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

Einführung in die Programmiersprache Java II

14 Abstrakte Klassen, finale Klassen, Interfaces

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Einführung in die Programmierung

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

1 Byteströme. 2 Spezialisierungen von Strömen. Lösungsskizze Aufgabe 1. Hinweise Aufgabe 2. Streams (Ein-/Ausgabe) Sockets (Netzwerkprogrammierung)

Programmiermethodik 3. Klausur Lösung

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

ALP II Dynamische Datenmengen Datenabstraktion

Einstieg in die Informatik mit Java

1 Polymorphie (Vielgestaltigkeit)

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Programmieren in Java

Vererbung & Schnittstellen in C#

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

6. Globalübung (zu Übungsblatt 8)

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren in Java

B.2 Das Java Ein-/Ausgabesystem

Begriffe 1 (Wiederholung)

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Javakurs für Fortgeschrittene

Exceptions und Vererbung

Programmierkurs Java

Algorithmen und Datenstrukturen

Klausur: Java (Liste P)

Teil 2: OOP und JAVA (Vorlesung 11)

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

3 Objektorientierte Konzepte in Java

Fragen zur OOP in Java

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Transkript:

Objektserialisierung

SEP 170 Serialisierung von Objekten Umwandlung des Objektzustandes in einen Strom von Bytes, aus dem eine Kopie des Objekts zurückgelesen werden kann. Serialisierung in Java einfacher Mechanismus zur Serialisierung von Objekten eigenes Datenformat Anwendungen Abspeicherung von internen Programmzuständen Übertragung von Objekten zwischen verschiedenen JVMs, z.b. über ein Netzwerk Aber: Zum Austausch von Daten mit anderen Programmen sind Standardformate (z.b. XML) oder speziell definierte Datenformate besser geeignet.

SEP 171 Serialisierung in Java Java stellt einen Standardmechanismus zur Serialisierung von Objekten zu Verfügung. Ablauf der Serialsierung eines Java-Objekts: 1 Metadaten, wie Klassenname und Versionsnummer, in den Byte-Strom schreiben 2 alle nichtstatischen Attribute (private, protected, public) serialisieren 3 die entstehenden Byte-Ströme in einem bestimmten Format zu einem zusammenfassen Bei der Deserialisierung wird der Datenstrom eingelesen und ein Java Objekt mit dem gespeicherten Zustand erzeugt.

SEP 172 Serialisierung in Java Kennzeichnung von serialisierbaren Objekten: Klasse implementiert das (leere) Interface java.io.serializable. Attribute einer serialisierbaren Klasse sollten Basistypen oder serialisierbare Objekte sein (sonst Laufzeitfehler bei Serialisierung). Gründe für Kennzeichnungspflicht: Sicherheit, z.b. Zugriffsbeschränkung auf private-attribute Serialisierbarkeit soll aktiv vom Programmierer erlaubt werden

SEP 173 Serialisierung von Objekten Objekte schreiben FileOutputStream f = new FileOutputStream("datei"); ObjectOutput s = new ObjectOutputStream(f); s.writeobject(new Integer(3)); s.writeobject("text"); s.flush(); Objekte lesen FileInputStream in = new FileInputStream("datei"); ObjectInputStream s = new ObjectInputStream(in); Integer int = (Integer)s.readObject(); String str = (String)s.readObject();

SEP 174 Serialisierung von Objekten Binär kodierte Objekte in datei aced0005737200116a6176612e6c616e...sr..java.lan 672e496e746567657212e2a0a4f78187 g.integer... 3802000149000576616c756578720010 8...I..valuexr.. 6a6176612e6c616e672e4e756d626572 java.lang.number 86ac951d0b94e08b0200007870000000...xp... 0374000454657874.t..Text

SEP 175 Serialisierung Beispiel class LinkedList implements Serializable { private int head; private LinkedList tail; //... } Attribute (head und tail) sind serialisierbar. Durch s.writeobject(l1) wird die gesamte Liste seralisiert, also auch l2 und l3.

SEP 176 Serialisierung Beispiel Serialisierung speichert den Objektgraphen. Kommt ein Objekt bei der Serialisierung eines anderen Objekts mehrmals vor, so wird nur eine Kopie gespeichert. Durch Serialisierung und Deserialisierung erhält man eine Kopie der Datenstruktur mit dem gleichen Objektgraphen. Identitätsgleichheit (==) von Objekten im Objektgraph bleibt erhalten. Beispiel Rückwärtszeiger in einer verketteten Liste werden richtig wiederhergestellt.

SEP 177 Transient Attribute, die nicht serialisiert werden sollen, können als transient markiert werden. Beipiele rekonstruierbare Daten, z.b. Caches oder andere aus Effizienzgründen gespeicherte Daten nichtserialisierbare Felder, z.b. Threads sensitive Daten public class Account { private String username; private transient String password; //... } N.B.: sensitive Daten wie Passwörter sollten ohnehin möglichst nicht im Hauptspeicher gehalten werden

SEP 178 Anpassen der Serialisierungsprozedur Serialisierungsmethoden können angepasst werden. Schreiben von zusätzlichen Daten, z.b. Datum wiederherstellen von transienten und nichtserialisierbaren Feldern, z.b. Wiederherstellung von Caches, Neustart von Threads Dazu müssen in der serialisierbaren Klasse zwei Methoden mit folgender Signatur geschrieben werden: private void writeobject(objectoutputstream oos) throws IOException private void readobject(objectinputstream ois) throws ClassNotFoundException, IOException

SEP 179 Anpassen der Serialisierungsprozedur Beispiel private void writeobject(objectoutputstream oos) throws IOException { // zuerst die Standardserialisierung aufrufen: oos.defaultwriteobject(); // zusätzliche Daten schreiben oos.writeobject(new java.util.date()); } private void readobject(objectinputstream ois) throws ClassNotFoundException, IOException { // zuerst die Standarddeserialisierung aufrufen: ois.defaultreadobject(); // zusätzliche Daten lesen: date = (Date)ois.readObject(); // mit transient markierte Felder wiederherstellen... }

SEP 180 Versionsnummern Serialisierte Objekte haben eine Versionsnummer. Objekte mit falscher Versionsnummer können nicht deserialisiert werden. Versionsnummer kann als statisches Attribut definiert werden: public static long serialveruid = 1L Ist keine Nummer angegeben, so benutzt Java einen Hashwert, der sich u.a. aus den Namen der Klassenattribute errechnet Änderungen an der Klasse (z.b. Hinzufügen einer Methode) machen serialisierte Daten inkompatibel. verhindert vesehentliches Einlesen inkompatibler Daten Durch Angabe einer serialveruid kann man Kompatibilität steuern, evtl. mit eigener readobject-funktion.

SEP 181 Serialisierbarkeit und Vererbung Alle Unterklassen einer serialisierbaren Klasse sind serialisierbar. Kann Serialisierung verhindern mit: private void readobject(objectinputstream stream) throws IOException, ClassNotFoundException { throw new NotSerializableException(); } private void writeobject(objectoutputstream stream) throws IOException { throw new NotSerializableException(); }

SEP 182 Serialisierbarkeit und Vererbung Ist eine Oberklasse einer serialisierbaren Klasse nicht serialisierbar, so werden ihre privaten Felder nicht serialisert. Beim Deserialisieren wird der Konstruktor ohne Argumente der ersten nichtserialisierbaren Oberklasse aufgerufen (ein Konstruktor ohne Argumente muss existieren!). readobject und writeobject müssen geeignet implementiert sein, damit der Zustand der Oberklasse beim Deserialisieren wiederhergestellt wird.