[RESOLVIDO] Serializable

6 respostas
calel
Estou lendo o livro da Kathy para a SCJP e fiquei com uma duvida na parte de Serializable... De acordo com o livro, se uma classe não implementa a interface Serializable deveria ocorrer uma exceção do tipo java.io.NotSerializableException com a classe Collar, mas quando fui testar a classe abaixo ela compilou e executou normalmente... Porque isso acontece?
import java.io.*;

public class SerializeDog {
	public static void main(String[] args) throws Exception{
		Collar c = new Collar(3);
		Dog d = new Dog(c, 5);
		
		System.out.println("before: collar size is " + d.getCollar().getCollarSize());
		
		FileOutputStream fs = new FileOutputStream("testSer.ser"); 	//FileNotFoundException
		ObjectOutputStream os = new ObjectOutputStream(fs); 		//IOException
		os.writeObject(d);											//IOException
		os.close();													//IOException		
		
		FileInputStream fis = new FileInputStream("testSer.ser");	//FileNotFoundException
		ObjectInputStream ois = new ObjectInputStream(fis);			//IOException
		d = (Dog) ois.readObject();									//java.lang.ClassNotFoundException
		ois.close();												//IOException
					
		System.out.println("after: collar size is " + d.getCollar().getCollarSize());
	}
}

class Dog implements Serializable{
	private Collar theCollar;
	private int dogSize;
	
	public Dog(Collar collar, int size){
		theCollar = collar;
		dogSize = size;
	}
	
	public Collar getCollar(){
		return theCollar;
	}
}

class Collar{
	private int collarSize;
	public Collar(int size){
		collarSize = size;
	}
	
	public int getCollarSize(){
		return collarSize;
	}
}

6 Respostas

AaroeiraA

Olá,

Eu executei o código no Netbeans e a resposta foi essa:

Exception in thread "main" java.io.NotSerializableException: javaapplication1.Collar
before: collar size is 3
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
        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 javaapplication1.NewClass3.main(NewClass3.java:22)
Java Result: 1
evertonsilvagomesjav

Deve ter algo de errado ai entao. Gera exceçao.

calel

Super estranho… vou ver aqui, valew

Vingdel

Compila, mas não executa...

C:\Users\Vingdel\Desktop>javac SerializeDog.java

C:\Users\Vingdel\Desktop>java SerializeDog
before: collar size is 3
Exception in thread "main" java.io.NotSerializableException: Collar
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
        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 SerializeDog.main(SerializeDog.java:12)

Abraço!

L

Mesmo 2 anos depois do ultimo comentário, como passei pelo mesmo erro, queria apenas postar uma ideia de solução.

Eu estava tendo o mesmo problema e simplemeste separei as classes em arquivos, de tal forma que as classes não sejam internas à que testa a serialização.

Dog.java uma classe em um arquivo separado.
O mesmo para Collar.class, outra classe em outro arquivo separado.

Com isto meu problema foi solucionado.

Valeu

jweibe

lsouza13:

Mesmo 2 anos depois do ultimo comentário, como passei pelo mesmo erro, queria apenas postar uma ideia de solução.

Eu estava tendo o mesmo problema e simplemeste separei as classes em arquivos, de tal forma que as classes não sejam internas à que testa a serialização.

Dog.java uma classe em um arquivo separado.
O mesmo para Collar.class, outra classe em outro arquivo separado.

Com isto meu problema foi solucionado.

Valeu

Bela ressuscitada de tópico… rsrsrs
Quanto a erro isso acontece por que ao serializar o estado de um objeto este processo obrigada as classes a serem serializada a implementar a interface java.io.Serializable,
independente das classes esta ou não no mesmo arquivo.

Criado 23 de agosto de 2010
Ultima resposta 28 de nov. de 2012
Respostas 6
Participantes 6