use java.io.ObjectInputStream e java.io.ObjectOutputStream
[]s
Luca
gwoliveira
O segredo é a serialização e aproveitando pra vender o peixe de um amigo da uma olhada sobre o prevayler, acredito que ele resolva seus problemas em recuperar os objetos, mas cuidado altamente viciante rs
[]s
L
lsr
BLZZZZ!! funciono! vlww
agora to um otro problema…
como eu leio o proximo do arquivo, soh consigo ler o primeiro.
vlw dnovo
Y
Yky_Mattshawn
Cara, seu eu não me engano a cada chamada que tu fazes ao readObject é retornado um objeto.
certo…
ja tinha feito isso… ele sempre le o primero objeto, mas qdo vai ler o segundo ele da essa exceção
java.io.StreamCorruptedException
EDIT:mais exatamente essa: java.io.StreamCorruptedException: invalid type code: AC
vlww
L
lsr
consegui… resolvi da seguinte forma
qdo vc faz um .writeObject((Object)) ele salva um cabeçalho e dpois as informações…
intaum, se vc le apenas com o .readObject(), ele vai ler apena a primeira linha e não vai reconhecer o proximo item, reconheceria eu conseguisse passar (naum sei como) um objeto com varias “Listas” ao inves de varios objetos de listas…
sendo assim, para cada reader.readObject() é necessario que o reader receba um new new ObjectInputStream(“asda.ser”);
vlw pelas ajudas… essa foi a solucao q eu encontrei… ainda estou aberto a solucoes melhores… vlw dnovo
D
duvidas
Olá… eu também estou enfrentando o mesmo problema com a leitura de objetos. Só consigo ler os objetos gravados quando o arquivo foi criado. Depois disto, a leitura gera uma exceção.
Você poderia detalhar melhor a sua solução?
Obrigaa.
caueda
//Para criar este tal objeto com várias listas (DTO - Data Transfer Object ou VO Value Object)//Digamos que você queira serializar uma lista de faturas e uma lista de beneficiários.//Primeiro vamos aos nossos objetos Fatura e Beneficiario:publicclassBeneficiarioimplementsSerializable{privatestaticfinallongserialVersionUID=7526471155622776147L;publicStringnome;publicBeneficiario(){}publicBeneficiario(Stringnome){this.nome=nome;}publicStringtoString(){returnnome;}}publicclassFaturaimplementsSerializable{privatestaticfinallongserialVersionUID=7526471155622776147L;publicdoublevalor;publicFatura(){}publicFatura(doublevalor){this.valor=valor;}publicStringtoString(){return""+valor;}}//Agora vamos ao nosso objeto DTO que irá guardar as nossas listas de Fatura's e Beneficiario'spublicclassObjetoDTOimplementsSerializable{privatestaticfinallongserialVersionUID=7526471155622776147L;publicListfaturas;publicListbeneficiarios;publicObjetoDTO(){}publicObjetoDTO(Listfaturas,Listbeneficiarios){this.faturas=faturas;this.beneficiarios=beneficiarios;}publicstaticvoidmain(String[]args){FileOutputStreamfs=null;ObjectOutputStreamos=null;// Crio as listas de Fatura e BeneficiarioListbeneficiarios=Arrays.asList(newBeneficiario("José"),newBeneficiario("Maria"));Listfaturas=Arrays.asList(newFatura(150.0),newFatura(200.0));//Crio o DTO com estas listasObjetoDTOdto=newObjetoDTO(faturas,beneficiarios);try{//Serialização fs=newFileOutputStream("c:/serializacao.txt");os=newObjectOutputStream(fs);os.writeObject(dto);}catch(IOExceptione){e.printStackTrace();}finally{try{if(os!=null)os.close();if(fs!=null)fs.close();}catch(IOExceptione){e.printStackTrace();}}//DeserializaçãoFileInputStreamfi=null;ObjectInputStreamoi=null;try{fi=newFileInputStream("c:/serializacao.txt");oi=newObjectInputStream(fi);ObjetoDTOobj=(ObjetoDTO)oi.readObject();System.out.println(obj.faturas);System.out.println(obj.beneficiarios);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}finally{try{if(oi!=null)fi.close();if(oi!=null)oi.close();}catch(IOExceptione){}}}}
condesales
Resolvi meu problema exatamente com a solução que o lsr colocou.
Para cada novo objeto que você vai ler, é preciso um novo ObjectInputStream