defaultWriteObject() ou defaultReadObject()

4 respostas
F

Nao entendi bem pq é obrigatório seu uso no processo call-back,
testei e vi se nao usá-lo os atributos do objeto serializados serão reniciliazados alguém sabe pq? :lol:

4 Respostas

LPJava

poe seu codigo ai!! vc usa esses metodos padrao quaando deseja q a serialização aconteça normalmente…

F

beleza la vai!!

class Dados{

  double matricola;
  Dados(double x){
     matricola=x; 
  }
 
    
}
class Universitario implements Serializable{
   transient  Dados d;
    String nome;
    Universitario(String x,Dados y){
        nome=x;
        d=y;
        
    }
    private void writeObject(ObjectOutputStream ob) throws Exception{
        ob.defaultWriteObject();//se nao usalos nao serializa o Objeto Universitario  pq??
        d.matricola=654321.0;
       ob.writeDouble(d.matricola);
        
    }
     private void readObject(ObjectInputStream ob) throws Exception{
        ob.defaultReadObject();//
        d=new Dados(ob.readDouble());
      }
     void mostrar(){
           System.out.println(" matricola "+nome+ " seria "+d.matricola);
     }
    
}

public class DeSerelizacao {
    
   
        public static void main(String...a) throws Exception{
            Dados d=new Dados(12345.566);
            Universitario u=new Universitario("fabio",d);
        
            ObjectOutputStream og=new ObjectOutputStream(new FileOutputStream("S.txt"));
            og.writeObject(u); 
            ObjectInputStream og2=new ObjectInputStream(new FileInputStream("S.txt"));
            Universitario b2=(Universitario) og2.readObject();  
            b2.mostrar();
      }
    
}

se eu nao usar os defaultwriteObject e defaultreadObject o construtor sera chamado para reinicializar os atributos de universitário,mas pq LPJava ??
Obrigado pela atenção!!Se eu passar no exame scjp1.5,um dia que tu vier para Fortaleza vou ter o prazer em te mostrar as praias daqui fera!! :smiley:

LPJava

pq a class Dados ela nao implements Serializable entao vc deve usar os metodos padrao para poder serializar universitario observe que no construtor de Universitario vc tem um objeto de Dados se nao fizer realmente vc nao vai conseguir serializar.
Bom olha esse exemplo é grande porem explica tudo que vc precisa saber o por que de usar esses metodos… o exemplo é bem semelhante ao seu veja:

//class dog
 class Dog implements Serializable{
 private transient  Collar theCollar;//variavel de instancia
private int dogSize;
	//construtor que recebe objeto e um int
	public Dog(Collar c,int s){
	theCollar = c;
	dogSize = s;
	}
	
	public Collar getCollar(){return theCollar;}	
	
	//implementando o metodo 
	private void writeObject(ObjectOutputStream oo){
		try{
		oo.defaultWriteObject();//aqui digo realize o processo normal de serializacao
			//aqui é o tamanho do collar
			oo.writeInt(theCollar.getCollarSize());
		}catch(Exception e){e.printStackTrace();}
	}
		//implementando o metodo read em relacao ao objeto dog	
	private void readObject(ObjectInputStream oi){
			try{
				oi.defaultReadObject();//cuida da serialização normal
				//aqui é o tamanho do colar serializado
				theCollar = new Collar(oi.readInt());
			}catch(Exception e){e.printStackTrace();}			
		}}
	
	//class collar 
 class Collar{
		private int collarSize;
		//construtor que recebe inteiro
		public Collar(int size){collarSize = size;}
		public int getCollarSize(){
		return collarSize;}
	}
/*esse processo manual de serialização é quando temos alguma classe nao serializada
entao é necessario immplementar os metodo writeObject e reaObject,
isso acontece pq nem tudo pode ser serilizavel a class object nao eh por exemplo
lembre que a implementacao deve ser  na classe que eh serializada ou seja dog neste caso
- os metodos deve ser PRIVADOS - private caso coloque como publico a exceção permanece
*/

P.S: a respeito de fortaleza vou cobrar tenho vontade de conhecer e muito! eheh :smiley:

F

tranquillo qd vier mesmo, pode mandar um email avisando terei grande prazer! e obrigadao pelo exemplo!!!

Criado 8 de fevereiro de 2008
Ultima resposta 8 de fev. de 2008
Respostas 4
Participantes 2