Oi, Achei uma solucao e uma explicacao mais ou menos ...
Solucao : Na hora de ler, vc faz FileInputStream fis = new FileInputStream ("nome do arquivo"); ObjectInputStream ois = new ObjectInputStream (fis); Bola b1 = (Bola)ois.readObject(); // como vc gravou 1 bola de cada vez, vc tem q criar outro ObjectInputStream, mas com o MESMO FileInputStream ois = new ObjectInputStream (fis); Bola b2 = (Bola)ois.readObject(); Agora, a explicação : Quando vc cria um ObjectOutputStream, ele escreve um cabecalho, no começo lógico do arquivo de serialização. Normalmente, esse começo é o próprio início do arquivo... Mas como é dado um append, isso ocorre no fim do arquivo. Ao tentar ler com ObjectInputStream, ele acha aquele cabecalho, mas ele estava esperando um marcador de novo objeto. Como não é o esperado, StreamCorruptedException acontece.... Solução : forcar o ObjectInputStream a ler novamente esse cabecalho... Como? Do jeito que eu expliquei acima.... :) Espero que tenha ajudado... :) Qualquer dúvida, olha no help do ObjectOutputStream, q explica esses headers e separadores de objetos e primitivos... .: xfer :. Quando ----- Original Message ----- From: "Eduardo de Britto Castro" <[EMAIL PROTECTED]> To: "Marcelo Alves" <[EMAIL PROTECTED]> Sent: Wednesday, March 13, 2002 11:49 PM Subject: Re: [java-list] Serialização de dois objetos no mesmo arquivo | Sim, seu teste funciona. Mas tente usar o modo append. | Imagine um programa que faça o seguinte: | 1 - Abre o arquivo (append) | 2 - Grava o objeto. | 3 - Fecha o arquivo | Você roda o programa duas vezes (gravou dois objetos no arquivo). | Então você faz um programa que usa o método readObject duas vezes para ler | os dois objetos (vai gerar uma excessão). | Estou mandando em anexo as classes que estou tentando fazer funcionar. | | | | | | | | ----- Original Message ----- | From: "Marcelo Alves" <[EMAIL PROTECTED]> | To: <[EMAIL PROTECTED]> | Cc: <[EMAIL PROTECTED]> | Sent: Wednesday, March 13, 2002 8:28 AM | Subject: Re: [java-list] Serialização de dois objetos no mesmo arquivo | | | > Oi, | > | > Bom, fiz um teste aqui, e funcionou perfeitamente... | > | > // ------------------------------------- | > import java.io.*; | > | > public class TesteSerializacao implements Serializable { | > private int campoA; | > private int campoB; | > private String str; | > | > public int getCampoA() { | > return campoA; | > } | > | > public void setCampoA(int campoA) { | > this.campoA = campoA; | > } | > | > public int getCampoB() { | > return campoB; | > } | > | > public void setCampoB(int campoB) { | > this.campoB = campoB; | > } | > | > public java.lang.String getStr() { | > return str; | > } | > | > public void setStr(java.lang.String str) { | > this.str = str; | > } | > | > public String toString() { | > StringBuffer b = new StringBuffer(); | > b.append("("); | > b.append(campoA); | > b.append(","); | > b.append(campoB); | > b.append(") "); | > b.append(str); | > | > return b.toString(); | > } | > | > public TesteSerializacao(int campoA, int campoB, String str) { | > this.campoA = campoA; | > this.campoB = campoB; | > this.str = str; | > } | > | > public static void main(String[] args) throws FileNotFoundException, | > IOException, ClassNotFoundException { | > // gravando | > ObjectOutputStream o = new ObjectOutputStream(new | > FileOutputStream("objetos.objects")); | > | > TesteSerializacao um = new TesteSerializacao(1, 2, "Objeto 1"); | > TesteSerializacao dois = new TesteSerializacao(10, 20, "Objeto | 2"); | > | > o.writeObject(um); | > o.writeObject(dois); | > | > o.flush(); | > o.close(); | > | > // lendo | > ObjectInputStream i = new ObjectInputStream (new FileInputStream | > ("objetos.objects")); | > TesteSerializacao a = (TesteSerializacao)i.readObject(); | > TesteSerializacao b = (TesteSerializacao)i.readObject(); | > | > System.out.println(a + "\n" + b); | > i.close(); | > } | > | > } | > // FIM ---------------------------------------------------- | > | > ----- Original Message ----- | > From: "Eduardo de Britto Castro" <[EMAIL PROTECTED]> | > To: <[EMAIL PROTECTED]> | > Sent: Monday, March 11, 2002 2:09 PM | > Subject: Re: [java-list] Serialização de dois objetos no mesmo arquivo | > | > | > Mas é isso mesmo que eu estou tentando fazer: gravar mais de um objeto em | um | > mesmo arquivo e depois os ler. | > ----- Original Message ----- | > From: [EMAIL PROTECTED] | > To: [EMAIL PROTECTED] | > Sent: Wednesday, March 06, 2002 8:53 AM | > Subject: RE: [java-list] Serialização de dois objetos no mesmo arquivo | > | > | > | > | > | > Em uma segunda olhada no código percebi que vc está passando true como | > segundo argumento do constructor FileOutputStream. Isso significa utilizar | > modo append. Essa é provavelmente a causa do problema. O arquivo já devia | > existir anteriormente comresquicios de testes anteriores, não? Quando você | > manda abrir o arquivo para leitura, você está lendo do início do arquivo | > novamente. | > | > Não passe este segundo argumento. | > | > Rodrigo | > -----Original Message----- | > From: Eduardo de Britto Castro [mailto:[EMAIL PROTECTED]] | > Sent: domingo, 3 de março de 2002 23:37 | > To: [EMAIL PROTECTED] | > Subject: Re: [java-list] Serialização de dois objetos no mesmo | arquivo | > | > | > Eu já fiz isso, mas mesmo assim o problema acontece. Posso até fazer | > um programa para gravar e outro para ler que dá problema no que lê. | > ----- Original Message ----- | > From: Rodrigo B. de Oliveira | > To: [EMAIL PROTECTED] | > Sent: Saturday, March 02, 2002 3:47 PM | > Subject: Re: [java-list] Serialização de dois objetos no mesmo | > arquivo | > | > | > flush e close a primeira stream antes de prosseguir... | > ----- Original Message ----- | > From: Eduardo de Britto Castro | > To: [EMAIL PROTECTED] | > Sent: Wednesday, February 27, 2002 2:49 PM | > Subject: [java-list] Serialização de dois objetos no mesmo | arquivo | > | > | > Porque depois de serializar mais de um objeto no mesmo arquivo | > ocorre uma excessao ao tentar recuperar o segundo? | > | > --------------------------------------- GRAVACAO | > OK --------------------------------------- | > MeuObjeto obj1, obj2; | > ObjectOutputStream out = new ObjectOutputStream (new | > FileOutputStream ("Serializacao.dat",true)); | > ... | > out.writeObject (obj1); | > out.writeObject (obj2); | > --------------------------------------- | > LEITURA --------------------------------------- | > MeuObjeto o1, o2; | > ObjectInputStream in = new ObjectInputStream (new | FileInputStream | > ("Serializacao.dat")); | > o1 = (MeuObjeto) in.readObject(); | > o2 = (MeuObjeto) in.readObject(); // Excessao ocorre aqui. | > | > ------------------------------- AQUI ESTA A | > EXCESSAO -------------------------------- | > Exception in thread "main" java.io.StreamCorruptedException | > at | > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1291) | > at | > java.io.ObjectInputStream.readObject(ObjectInputStream.java:322) | > at Serializacao.main(Serializacao.java:25) | > | > | ------------------------------ LISTA SOUJAVA ---------------------------- http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP dúvidas mais comuns: http://www.soujava.org.br/faq.htm regras da lista: http://www.soujava.org.br/regras.htm historico: http://www.mail-archive.com/java-list%40soujava.org.br para sair da lista: envie email para [EMAIL PROTECTED] -------------------------------------------------------------------------