serialização duvida

4 respostas
LPJava

ae pessoal estudo serialização cap 6 da kathy fiquei na duvida na classe que fiz abaixo, eu achei que ele salvaria apenas o estado objeto com o valor “Camilo”, pois coloqueo um novo valor ao objeto apos a serialização e mesmo assim ele salvou o estado com o novo valor ai fiquei confuso isso… alguem pode me explicar o q houve?

import java.io.*;
class Cobr implements Serializable{
	public static void main(String [] agrs){
		StringBuilder sb = new StringBuilder("camilo ");
		
		
		try{
			FileOutputStream fo = new FileOutputStream("cobr.txt");
			ObjectOutputStream oo = new ObjectOutputStream(fo);
			oo.writeObject(sb);
			
			System.out.println("objeto serializado");
			oo.close();
			
		}catch(Exception e){}
		sb.append("neto");
		try{
			FileInputStream fi = new FileInputStream("cobr.txt");
			ObjectInputStream oi = new ObjectInputStream(fi);
			 oi.readObject();
			 System.out.println("objeto deserializado " + sb);
		}catch(Exception e){e.printStackTrace();}
	}
}

4 Respostas

ViniGodoy

Você tem que mudar a linha:
oi.readObject();

Para:
sb = (StringBuilder)oi.readObject();

Caso contrário, você estará de-serializando o objeto para lugar nenhum!

Deh

você leu o Objeto, mas o valor do “sb” ainda existia… (com o “camilo neto”)

ou seja, você leu o objeto, não jogou o valor pra ninguem, e leu a instância antiga…

em vez de:

coloque assim:

LPJava

po galera funcionou, tinha que faz essa conversao, senao ele retornar a um Object ne?
Bom eu fiquei na duvida assim salvei o estado do objeto,com “camilo” depois adicionar um novo valor ao meu objeto … e des-serializei aquele objeto que serializei ainda pouco… mais imprimir o valor do objeto pq ele nao imprime com o novo valor “camilo neto” o que aconteceu com neto? ta perdido? :S

Deh

você serializou o Objeto que tinha “camilo”, e salvou o “camilo” =p
o que você faz depois… no seu caso adicionou “neto”, isso não é salvo…

quando você de-serializa vem o objeto que você salvou, ou seja, o objeto que possui “camilo”, se você fizesse assim:

em vez de “sb” receber o valor:

StringBuilder sb2 = (StringBuilder) oi.readObject();

você teria dois objetos… o Objeto sb2 com “camilo” e o Objeto sb com “camilo neto”…

conseguiu entender?

Criado 7 de fevereiro de 2007
Ultima resposta 7 de fev. de 2007
Respostas 4
Participantes 3