Serialização de tipos primitivos e de objectos: a interface Serializable. Elementos não serializáveis: a palavra chave transient.
class Alienígena implements Serializable {
String _nome;
transient String _segredo = "7";
public Alienígena(String n) { _nome = n; _segredo = _nome + _nome.length(); }
public void voing() { System.out.println(_nome + (_segredo != null ? _segredo : "")); }
}
public class Serialização {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Alienígena a1 = new Alienígena("Zorg"), a2 = new Alienígena("Zog");
a1.voing(); //output: ZorgZorg4
a2.voing(); //output: ZogZog3
ObjectOutputStream out =
new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("raw.dat")));
out.writeObject(a1); out.writeObject(a2);
out.close();
ObjectInputStream in =
new ObjectInputStream(new BufferedInputStream(new FileInputStream("raw.dat")));
Alienígena r1 = (Alienígena)in.readObject(); // pode lançar “StreamCorruptedException”
Alienígena r2 = (Alienígena)in.readObject();
r1.voing(); //output: Zorg
r2.voing(); //output: Zog
}
}
Note-se que a função main declara o lançamento de excepções. Esta prática foi usada por simplicidade de exposição e não é ideal em geral: a função deveria tratar as excepções.