Serializando Coleções

 

Abaixo mostraremos dois exemplos de como podemos serializar coleções. Quais serão as conseqüências de essas coleções possuírem objetos não serializáveis em seu conteúdo? 

 

 

Exemplo simples:

 
 

import java.io.*;

 
 

public class Teste {

 
 

public static void main(String[] args){

        //veja que Dog não é serializavel

Animal[] a = {new Cat(),new Dog()
, new Cat()};                

 
 

try {

FileOutputStream fos = new FileOutputStream(“animals.ser”);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(a);

} catch (Exception e){e.printStackTrace();}        

 
 

}

 
 

}

 
 

class Animal {}

class Dog extends Animal{}

class Cat extends Animal implements Serializable{}

 
 

javac: ok à Compila !!!

java Teste

java.io.NotSerializableException: Dog

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1173)

at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1355)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1163)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)

at Teste.main(Teste.java:11)

 
 

 
 

Exemplo mais elaborado:

 
 

package mycollection;

 
 

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.ArrayList;

 
 

 
 

————————————————————————————————————————————-

public class SerializeCollection {

public static void main(String[] args) {

 
 

Object[] animals = new Object[3];

animals[0] = new Boi(“Nelore”);

animals[1] = new Carneiro(“Peludo”); // carneiro não é serializavel… Teremos um erro

animals[2] = new Boi(“Gir”);

 
 

try {

 
 

FileOutputStream fos = new FileOutputStream(“persisted”);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(animals);

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

 
 

 
 

Output:

java.io.NotSerializableException: mycollection.Carneiro

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1173)

at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1355)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1163)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:343)

at mycollection.SerializeCollection.main(SerializeCollection.java:19)

 
 

 
 

————————————————————————————————————————————-

 
 

public class SerializeCollection {

public static void main(String[] args) {

 
 

ArrayList animals = new ArrayList();

animals.add(new Boi(“Gir”));

animals.add(new Carneiro(“Peludo”)); // carneiro não é serializavel …. Vai dar pau !!!

animals.add(new Boi(“Nelore”));

 
 

try {

FileOutputStream fos = new FileOutputStream(“persisted”);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(animals);

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

 
 

Output:

java.io.NotSerializableException: mycollection.Carneiro

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)

at java.util.ArrayList.writeObject(ArrayList.java:570)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)

at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)

at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)

at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)

at mycollection.SerializeCollection.main(SerializeCollection.java:20)

 
 

————————————————————————————————————————————-

 
 

 
 

// SERIALIZAVEL

class Boi implements Serializable {

private String raca;

 
 

public Boi(String raca) {

this.raca = raca;

}

 
 

public String getRaca() {

return this.raca;

}

}

 
 

// NÃO SERIALIZAVEL

class Carneiro {

private String raca;

 
 

public Carneiro(String raca) {

this.raca = raca;

}

 
 

public String getRaca() {

return this.raca;

}

}

 
 

 
 

Anúncios
Esta entrada foi publicada em java.io com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s