(→Serialização de Objectos) |
(→Exemplo: Zorg e Zog) |
||
Line 15: | Line 15: | ||
<source lang="java"> | <source lang="java"> | ||
− | public class Serialização { | + | 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(); | ||
+ | } | ||
+ | } | ||
} | } | ||
− | |||
</source> | </source> | ||
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.