Problema com serialização

1 resposta
L

Bah galera, estou precisando de ajuda. O negocio é o seguinte: estou com dois métodos, um que insere um objeto serializado em um arquivo e outro que lista os objetos desse arquivo. A dúvida é: como fazer pra listar todos os objetos, pois em um arquivo de acesso sequencial normal da pra usar uma estrutura de repetição tendo a condição de parada a linha nula. Nos objetos serializados como faço essa lista? nesse código ele só lista o primeiro objeto, os outros não.

public boolean inserirMoeda(Moeda moeda) {

boolean inserido = false;

try {

saida = new ObjectOutputStream(new FileOutputStream(this.arquivo, true));

writeRecord(saida, moeda);

inserido = true;

} catch (IOException ioe) {

System.out.println(Erro de gravação!);

}catch (ClassNotFoundException cnfe){

System.out.println(cnfe);

} finally {

fecharFluxo(saida);

}
return inserido;
}
public Moeda[] listarMoedas() {

Vector lista = new Vector();

try {

File file = new File(“moeda.ser”);

ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));

Moeda moeda = (Moeda) in.readObject();

lista.add(moeda);

in.close();
} catch (ClassNotFoundException e) {
            } catch (IOException e) {
    }

	return lista.toArray(new Moeda[0]);

}

1 Resposta

T

Se este método abrir um ObjectOutputStream, então ele acabará sempre escrevendo na primeira posição. O correto é outro método deixar o ObjectOutputStream aberto, e esse método inserirMoeda chamar apenas writeObject. Não se esqueça de ter um método que fecha o ObjectOutputStream.

No outro lado, o método listarMoedas infelizmente terá de capturar uma Exception porque você não está gravando o número de moedas serializadas. Então você terá de chamar readObject até que ocorra uma exceção, já que readObject não retorna “null” se o arquivo de entrada acabar.

Criado 26 de agosto de 2008
Ultima resposta 26 de ago. de 2008
Respostas 1
Participantes 2