dúvida em serializacao - kathy

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;}
	
}

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)

[code]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;}

}[/code]

Valeu

pior que eh verdade… valeu!!!