Serialisierung Benedict Fehringer Proseminar Programmiersysteme Betreuer Guido Tack
Serialisierung Benedict Fehringer Proseminar Programmiersysteme Betreuer: Guido Tack
Übersicht • • Einführung Datengraphen und abstrakter Speicher Pickles (Unpickling, Pickling) Bsp. in Java und Alice
Einführung
Was meint Serialisierung? Serialisierung bedeutet, dass ein Datengraph in eine eindimensionale (lineare)-Form gebracht wird, so dass diese eindeutig in den Ursprungs. Datengraph umgewandelt werden kann.
Wozu benötigt man Serialisierung? • Speichern • Transferieren • Compilieren
Umsetzung der Serialisierung in verschiedenen Sprachen • CLU (eine Sprache, die von Pascal abstammt); (B. Liskov and St. Zilles, 1974) • JAVA (Roger Riggs, Jim Waldo, Ann Wollrath Sun Microsystems, Inc. , 1996), Microsoft`s. NET Framework • Ruby oder Python • SML/NJ (A. W. Appel and D. B. Mac. Queen, 1994), OCaml, Alice • Mozart/Oz
Datengraphen und abstrakter Speicher
Bsp. für einen Datengraph class A class B A x = new A (); { { B y = new B (); public string s; public int j; x. s = „aaa“; public int i; public A a; x. i = 24; public B b; } x. b = y; } y. j = 45; y. a = x;
Bsp. für einen Datengraph object x string „aaa“ int „ 24“ object y int „ 45“ Adresse Label Inhalt 0 object x 1|2|3 1 int „ 24“ 2 string „aaa“ 3 object y 0|4 4 int „ 45“
Datengraph (formal) Ein Datengraph ist eine endliche Funktion g, so dass gilt: Ran(g) Lab x (Str Dom(g)*)
Abstrakter Speicher • Spezielle Datenstrukturen benötigen eine spezielle Repräsentation (Zahlen, Strings, Arrays, . . . ) (kann zur Optimierung implementiert werden)
Pickles
Definitionen Pickle: - linear - external - „Platform-unabhängige“ Pickling - Umwandlung eines Datengraphen in einen Pickle Unpickling - Umkehrvorgang zum Pickling
Konstruktion/Unpickling von Datengraphen • Baum • azyklischer Graph • zyklischer Graph
Baum a c b c d Instruktion # Nachfolger c 0 d 0 b 2 a 2
Baum a c b c d Instruktion # Nachfolger c 0 d 0 b 2 a 2
Azyklischer Graph a b c d Instruktion # Nachfolger c STORE 0 0 - LOAD 0 - d 0 b 2 a 2
Azyklischer Graph a b c d Instruktion # Nachfolger c STORE 0 0 - LOAD 0 - d 0 b 2 a 2
Zyklischer Graph Instruktion a PROMISE 0 a b c d # Nachfolger 2 c 1 STORE 1 - LOAD 1 - d 0 b 2 FULFIL 0 2
Zyklischer Graph Instruktion a PROMISE 0 a b c d # Nachfolger 2 c 1 STORE 1 - LOAD 1 - d 0 b 2 FULFIL 0 2
Pickling • Schritt 1: Datengraph Pickle-Baum • Schritt 2: Pickle-Baum Postorder. Linearisierung • Schritt 3: Postorder-Linearisierung Pickle
Schritt 1 0: a a 1: c b c Datengraph d -> 0 b -> 1 Pickle-Baum d
Schritt 2 0: a b 1: c -> 0 -> 1 Pickle-Baum d Knoten # Nachfolger -> 0 - 1: c 1 -> 1 - d 0 b 2 0: a 2 Postorder-Linearisierung
Schritt 3 Knoten # Nachfolger -> 0 - PROMISE 0 a 2 1: c 1 STORE 1 - -> 1 - LOAD 1 - d 0 b 2 0: a 2 FULFIL 0 2 Postorder-Linearisierung Bottom-up-Pickle
Top-Down-Pickles • Präorder statt Postorder Pickle • Kein Promise/Fulfill nötig Top-Down
Verschiedene Darstellungen eines Pickle-Bäume 0: a 1: c -> 0 0: a b -> 1 = d b -> 1 1: c -> 0 d
Implementier-Details • Depth First Search (Graph Pickle-Baum Pickle) • Bestimmung der maximalen Stack-Höhe
Realisierung in JAVA und Alice
JAVA-Objekt-Modell • • • Klassen Objekte Felder Methoden. . .
Pickling in Java • Objekte können serialisiert werden • Top-Down-Mechanismus • Pruning
Bsp. für Pickling in Java import public { public } java. io. Serializable; class A implements Serializable int i; string s;
Bsp. für Pickling in Java 10 public class Flatten. A 20 { 30 public static void main(String [] args) 40 { 50 A a = new A(); 60 File. Output. Stream fos = new File. Output. Stream(“aa. ser"); 70 Object. Output. Stream out = new Object. Output. Stream(fos); 80 out. write. Object(a); 90 out. close(); 100 } 110 }
Bsp. für Pickling in Java 10 public class Inflate. A 20 { 30 public static void main(String [] args) 40 { 50 A a = null; 60 File. Input. Stream fis = null; 70 Object. Input. Stream in = null; 80 try 90 { 100 fis = new File. Input. Stream(“aa. ser"); 110 in = new Object. Input. Stream(fis); 120 a = (A)in. read. Object(); 130 in. close(); 140 } 150 catch(IOException ex) { ERROR!!!} 160 catch(Class. Not. Found. Exception ex) { ERROR!!! } 170 } 180 }
Pruning • der Programmierer kann selbst entscheiden, welcher Teil gepickelt werden soll und welcher nicht. • Die nicht zu Pickelndeln Teile müssen markiert werden
Bsp. für Pickling in Java import java. io. Serializable; public class A implements Serializable { transient public int i; public string s; }
Pickling in Alice • Pickling beliebiger Daten • Typsicherheit • Anwendung: z. B. Komponentensystem / Compiler
Bsp. für Pickling in Alice signature NUM = sig type t fun from. Int : int -> t fun to. Int : t -> int fun add : t * t -> t end structure Num : > NUM = struct type t = int fun to. Int n = n fun from. Int n = n val add = op+ end
Bsp. für Pickling in Alice Pickling: Pickle. save: string * package -> unit Pickle. save ("Num. " ^ Pickle. extension, pack Num : > NUM) Unpickling: Pickle. load: string -> package structure Num' = unpack Pickle. load ("Num. " ^ Pickle. extension) : NUM
Bsp. für Pickling in Alice Achtung! Num'. add (Num. from. Int 4, Num. from. Int 5) 1. 0 -1. 39: argument type mismatch: t * t does not match argument type Num'. t * Num'. t because type Num. t does not unify with Num'. t
Literaturverzeichnis • Guido Tack, Linearisation, Minimisation and Transformation of Data Graphs with Transients. Diplomarbeit, Saarbrücken, Mai 2003 • Roger Riggs, Jim Waldo, Ann Wollrath Sun Microsystems, Inc. , Pickling State in the Java™ System, Toronto, Ontario, Canada, June 1996 • Java Object Serialization Specification. Available from http: //java. sun. com/j 2 se/1. 4/docs/guide/serialization/, 2001. • The Alice Project. Available from http: //www. ps. unisb. de/alice, 2003. Homepage at the Programming Systems Lab, Universität des Saarlandes, Saarbrücken.
- Slides: 40