dúvida em serializacao - kathy

2 respostas
LPJava

ae pessoal lendo o livro da kathy pg 256/257 ela diz que a sintaxe abaixo lançaria em tempo de execucao uma exceção caso a class Collar nao fosse Serializada… porem ta rodando normal aqui… pq? mas teoricamente no deveria lançar?

import java.io.*;
public class SerializeDog {

	public static void main(String[] args) {
		Collar c = new Collar(3);
		Dog d = new Dog(c,7);
		System.out.println("before: collar " + d.getCollar().getCollarSize());
		try{
			FileOutputStream fp = new FileOutputStream("dog.ser");
			ObjectOutputStream oo = new ObjectOutputStream(fp);
			oo.writeObject(d);
			oo.close();
		}catch(Exception e){}
		/*try{
			FileInputStream a = new FileInputStream("dog.ser");
			ObjectInputStream oi = new ObjectInputStream(a);
			d=(Dog)oi.readObject();
			oi.close();
		}catch(Exception e){}
		System.out.println("after : collar is " + d.getCollar().getCollarSize());*/
	}
}

class Dog implements Serializable{
	private Collar collar;
	private int dogSize;
	public Dog(Collar collar,int size){
		this.collar=collar;
		dogSize=size;
	}
	public Collar getCollar(){return collar;}
}
class Collar {
	private int collarSize;
	public Collar(int s){collarSize=s;}
	
	public int getCollarSize(){return collarSize;}
	
}

2 Respostas

acopiara

Você deixou seu bloco catch sem nada. Por isso que nao apareceu nada.
Para resolver esse problema da serializacao marque a variavel Collar como transient e implemente os metodos writeObject e readObject na classe Dog.

Chamando o metodo printStackTrace() da exception:

before: collar 3
java.io.NotSerializableException: Collar
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
at SerializaDog.main(SerializaDog.java:11)

import java.io.*;
 public class SerializaDog {
 
 	public static void main(String[] args) {
 		Collar c = new Collar(3);
 		Dog d = new Dog(c,7);
 		System.out.println("before: collar " + d.getCollar().getCollarSize());
 		try{
 			FileOutputStream fp = new FileOutputStream("dog.ser");
 			ObjectOutputStream oo = new ObjectOutputStream(fp);
 			oo.writeObject(d);
 			oo.close();
 		}catch(Exception e){
 			e.printStackTrace();
 		}
 		/*try{
 			FileInputStream a = new FileInputStream("dog.ser");
 			ObjectInputStream oi = new ObjectInputStream(a);
 			d=(Dog)oi.readObject();
 			oi.close();
 		}catch(Exception e){}
 		System.out.println("after : collar is " + d.getCollar().getCollarSize());*/
 	}
 }
 
 class Dog implements Serializable{
 	private Collar collar;
 	private int dogSize;
 	public Dog(Collar collar,int size){
 		this.collar=collar;
 		dogSize=size;
 	}
 	public Collar getCollar(){return collar;}
 }
 class Collar {
 	private int collarSize;
 	public Collar(int s){collarSize=s;}
 	
 	public int getCollarSize(){return collarSize;}
 	
 }

Valeu

LPJava

pior que eh verdade… valeu!!!

Criado 28 de fevereiro de 2007
Ultima resposta 1 de mar. de 2007
Respostas 2
Participantes 2