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) {
Alienígena a1 = new Alienígena("Zorg"), a2 = new Alienígena("Zog");
a1.voing(); // output: ZorgZorg4
a2.voing(); // output: ZogZog3
try (ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("raw.dat")))) {
out.writeObject(a1);
out.writeObject(a2);
} catch (IOException e) {
e.printStackTrace();
}
try (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
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
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.