Entradas e Saídas em Java/Exemplo 04: Serialização de Objectos

From Wiki**3

< Entradas e Saídas em Java

Serialização de Objectos

Serialização de tipos primitivos e de objectos: a interface Serializable. Elementos não serializáveis: a palavra chave transient.

Exemplo: Zorg e Zog

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.