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