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] 
-------------------------------------------------------------------------

Responder a