April 05
Prof. Ismael H. F. Santos -  ismael@tecgraf.puc-rio.br                                                          2
Uso de Serialização
nLP’s modernas possuem funcionalidade para descarregar o estado da aplicação em um arquivo ou em um banco de dados. Todo o grafo de objetos de uma aplicação é serializado e armazenado, para futura restauração:
nPrevailer (http://www.prevayler.org/wiki.jsp)
nBamboo.Prevalence-http://bbooprevalence.sourceforge.net
nVantagem:
ndesenvolvedor trabalha em memória principal.
nDesvantagens:
nEstado da aplicação deve ser gravado/restaurado todo de uma vez em memória principal.
nMudança do esquema do modelo OO, acesso concorrente...
import java.io.*;

class Student implements Serializable {
   //static final long serialVersionUID = 4259457944890225731L;

   private String name;
   //private String prename = "Hans"; // added for second version
   private int    age;

   public Student(String name, int age) {
     System.out.println("Student()");
     this.name = name;
     this.age  = age;
   }

   public String toString() {
     return name + ", " + age;
     // return (prename!=null?prename:"") + " " + name + ", " + age;
   }
}

class WriteStudent {
   public static void main(String [] args) throws Exception {
     Student p = new Student("Alfred", 22);
     ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Student.ser"));

     try {
       System.out.println(p);
       oos.writeObject(p);

       Student[] s = new Student[2];
       s[0] = p;
       s[1] = p;
       oos.writeObject(s);
     }
     finally {
       try {oos.flush();} catch (IOException ioe) {}
       try {oos.close();} catch (IOException ioe) {}
     }
   }
}

class ReadStudent {
   public static void main(String [] args) throws Exception {
     ObjectInputStream ois = new ObjectInputStream(new FileInputStream("Student.ser"));
     try {
       Object o = ois.readObject();
       System.out.println("Read object " + o);

       Object o2 = ois.readObject();
       Student[] s = (Student[])o2;
       System.out.println(s[0]);
       System.out.println(s[1]);
       System.out.println(s[0] == s[1]);
       System.out.println(s[0] == o);
     }
     finally {
       try {ois.close();} catch (IOException ioe) {}
     }
   }
}