Serialização

3 respostas
drsmachado

Caros, sou novo no fórum, já realizei uma imensa pesquisa dentro do GUJ e no google, olhei a API do java.io.ObjectInputStream e não encontrei algo que possa me auxiliar.
A questão é a seguinte, preciso serializar objetos em um arquivo, para isto utilizei o java.io.ObjectOutputStream. Minha classe ficou assim:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

/**
 *
 * @author Administrador
 */
public class gravaObjeto {
    FileOutputStream fos;
    ObjectOutputStream oos;
    Object obj;

    public void gravarObjeto(Object objeto){
        try{
            this.obj = objeto;
// aqui o atributo "true" inica que o arquivo deverá permitir o append de novos objetos
            fos = new FileOutputStream("C:\tmpo.txt", true);
            oos = new ObjectOutputStream(fos);
            oos.writeObject(obj);
            oos.flush();
            fos.close();
            oos.close();
        }catch(IOException ioe){
            System.out.println(ioe);
        }
    }

}

O arquivo é gerado sem problemas, porém, não encontrei em nenhuma fonte a qualquer forma (mesmo tosca) de fazer com que o ObjectInputStream faça a leitura de todos os objetos serializados.
Todos os métodos da classe ObjectInputStream não dão suporte à qualquer método boolean que permita verificar se os objetos foram lidos.
Praticamente todas as fontes que consultei apenas tratam da serialização de um único objeto, o problema é que, devido a uma questão da faculdade, preciso serializar mais de um objeto e recuperá-lo, mas não quero fazer isto com um ArrayList, pois a proposta do problema é para que os atributos de cada classe sejam informados e salvos, mesmo com intervalos de tempos, tornando o uso do Arraylist inviável (a não ser que toda vez que eu vá serializar um objeto carregue todo o array e refaça o processo, mas isto é meio ilógico).

Portanto, como ler mais de um objeto serializado em um arquivo?

3 Respostas

rmendes08

Cara, sinceramente não entendi sua dúvida. Para serializar mais de um objeto em um mesmo arquivo basta chamar writeObject para cada um dos seus arquivos, e para fazer a leitura basta chamar readObject diversas vezes também. Uma maneira de indicar o final da escrita é serializar null, e quando você for desserializar você lê objetos até encontrar null e para a leitura. Agora, eu realmente não entendi qual é o seu problema, seja mais objetivo.

drsmachado

A serialização está ok, o problema é que, ao chamar o readObject() somente o primeiro objeto é lido, independente de quantos existam.
Por exemplo, caso eu serialize os numero 1, 2, 3, 4 como objetos, ao ler o arquivo, apenas o objeto 1 é retornado.

rmendes08

Sim, o comportamento é esse mesmo, o que você precisa fazer é chamar readObject para cada objeto lido. Mas realmente, acho que a maneira mais limpa de trabalhar com isso é serializar a estrutura de dados em que você mantém os objetos e recompô-la quando ler o arquivo.

Criado 25 de setembro de 2010
Ultima resposta 25 de set. de 2010
Respostas 3
Participantes 2