Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è...

10
Java Serialization

Transcript of Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è...

Page 1: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Java

Serialization

Page 2: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Il problema della persistenza

Persistenza dei datiquando l’applicazione non è running:

salvataggio della struttura interna di un oggetto.

E’ un problema ricorsivo!

Serializzazione: trasformazione di oggetti in “stream di dati” (seriali).

Il JDK prevede delle API per la serializzazione,e la maggior parte delle sue classi sono serializzabili.

Page 3: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

persistenza selettiva

Le variabili dichiarate

transient

non vengono serializzate.

Page 4: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Supporto di JDK alla persistenza

ObjectOutputStream: converte oggetti dalla rappresentazionein memoria a quella serializzata.ObjectInputStream: converte oggetti dalla rappresentazioneserializzata a quella in memoria.

Serializable: interfaccia senza metodi che marca una classecome seralizzabile.

Externalizable: interfaccia con metodi (sottoclasse di Serializable)che fornisce maggior controllo sul processo di serializzazione.

ObjectInputValidation: interfaccia per verificare la correttadecodifica di un oggetto.

Page 5: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Principali Metodi di ObjectOutputstream

ObjectOutputStream(OutputStream) costruttorewriteObject(Object) serializza Objectclose()flush()reset()writeInt(int) writeFloat(float) writeDouble(double)

Page 6: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Principali Metodi di ObjectInputstream

ObjectInputStream(InputStream) costruttoreObject readObject() deserializza Objectavailable() dice quanti bytes ci sono da leggereint readInt()float writeFloat() double writeDouble()

registerValidation(ObjectValidation,int)

Page 7: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Esempio –Writer 1/2

package serialDemo;import java.io.*;import java.util.*;

public class Writer {

HashMap hm=new HashMap(); public Writer() { System.out.println("WRITER-------------------------"); for (int k=1;k<=10;k+=2) { String key=new String("a"+k); Integer ik=new Integer(k); hm.put(key,ik); } System.out.println(hm.size()); Iterator i=hm.keySet().iterator(); while (i.hasNext()) { Object o=i.next(); System.out.println(o.toString()+" #"+hm.get(o).toString()); }

Page 8: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Esempio –Writer 2/2

FileOutputStream ofs=null; ObjectOutputStream oos=null; try { ofs=new FileOutputStream("serialiazidStream.txt"); oos=new ObjectOutputStream(ofs); oos.writeObject(hm); } catch (IOException ex) { ex.printStackTrace(); } }//--------------------------------------------- public static void main(String[] args) { Writer writer = new Writer(); }}

Page 9: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Esempio –Reader 1/2

package serialDemo;import java.io.*;import java.util.*;

public class Reader {

HashMap hm=null; //------------------------------------------ public static void main(String[] args) { Reader reader = new Reader(); }

Page 10: Java Serialization. Il problema della persistenza Persistenza dei dati quando lapplicazione non è running: salvataggio della struttura interna di un oggetto.

Esempio –Reader 2/2

public Reader() { System.out.println("READER -------------------------"); FileInputStream ofs=null; ObjectInputStream oos=null; try { ofs=new FileInputStream("serialiazidStream.txt"); oos=new ObjectInputStream(ofs); hm=(HashMap)oos.readObject(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); }catch (IOException ex) { ex.printStackTrace(); } System.out.println(hm.size()); Iterator i=hm.keySet().iterator(); while (i.hasNext()) { Object o=i.next(); System.out.println(o.toString()+" #"+hm.get(o).toString()); } }