Como verificar EOF após a Serialização?

2 respostas
ribclauport

Bom, eu estava fazendo uma revisão e me deparei como uma questão a respeito de Serialização, pesquisando formas de ler os objetos em um arquivo fiz isso em um while, e capturo uma exception, Teria outra forma mais elegante de ler os objetos em um arquivo e detectar o final do arquivo? segue abaixo meu codigo de exemplo para ilustrar:

import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Pessoa implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 6918211458968938345L;

	Pessoa(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	private String nome;
	

	public static void main(String[] args) throws IOException,
			ClassNotFoundException {
		FileOutputStream f = new FileOutputStream("pessoas.ser");
		ObjectOutputStream oo = new ObjectOutputStream(f);
		oo.writeObject(new Pessoa("Zé das Medalhas"));
		oo.writeObject(new Pessoa("Viúva Porcina"));

		FileInputStream fi = new FileInputStream("pessoas.ser");
		ObjectInputStream oi = new ObjectInputStream(fi);

		while (true) {
			try {
				Pessoa p = (Pessoa) oi.readObject();
				System.out.println(p.nome);
			} catch (EOFException e) {
				System.out.println("fim arquivo");
				break;
			}

		}
	}
}

Agradeço a ajuda.

2 Respostas

rmendes08

Você pode incluir um objeto para marcar o fim do arquivo. Você pode inclusive escrever uma constante null no fim do arquivo e depois ler os objetos até achar null.

ribclauport

Valeu a dica! fica assim então né...

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Pessoa implements Serializable {
	/**
	 * 
	 */
	public static final Object FA = null;
	private static final long serialVersionUID = 6918211458968938345L;

	Pessoa(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	private String nome;

	public static void main(String[] args) throws IOException,
			ClassNotFoundException {
		FileOutputStream f = new FileOutputStream("pessoas.ser");
		ObjectOutputStream oo = new ObjectOutputStream(f);
		oo.writeObject(new Pessoa("Zé das Medalhas"));
		oo.writeObject(new Pessoa("Viúva Porcina"));
		oo.writeObject(FA);

		FileInputStream fi = new FileInputStream("pessoas.ser");
		ObjectInputStream oi = new ObjectInputStream(fi);
		Pessoa p;
		while ((p = (Pessoa) oi.readObject()) != FA) {
			System.out.println(p.nome);
		}
	}
}

Saída:

Zé das Medalhas
Viúva Porcina
Criado 10 de maio de 2012
Ultima resposta 11 de mai. de 2012
Respostas 2
Participantes 2