Problemas com serialização, aparece esse Erro: java.io.EOFException

1 resposta
Velasco

Fala Galera.... Um grande abraço a todos, e parabéns para todos que tem a boa vontade de ajudar ao iniciantes em JAVA.

O problema é o seguinte, estou fazendo exercícios de serialização, para fixação. E me deparei com o problema;
Eu fiz um exemplo que encontrei no livro, que é o seguinte: Uma Classe Player (Com 3 atributos: String classe, int lvl, e String []armas), Uma classe para executar, e uma outra para Ler.

Eu fiz esse exercício 2 vezes: A primeira uma Classe Player, uma Classe Executa Player (que tinha a lógica de gravação), e uma Classe para Ler o arquivo gravado...
Desse jeito funcionou.

O segundo exercício, eu fiz com uma Classe a mais: Uma Classe Gravação (aonde eu coloquei a lógica de gravação, e tirei do Executa Player) , e continue com uma nova Classe Executa Player e uma Classe Leia Player...

Só que esse fica me dando esse Erro: java.io.EOFException.
[color=red]Exception in thread "main"[/color] [color=darkblue]java.io.EOFException[/color]
[color=red]at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at serializacao.TestaPlayerLer.main([/color]TestaPlayerLer.java:16[color=red])[/color]

A baixo segue as 4 Classes, se for besteira me desculpem, mas desde já agradeço.

package serializacao;

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

public class Gravacao implements Serializable {

	public Gravacao(Object o) throws IOException{
		
		FileOutputStream fo = new FileOutputStream("exemplo.dat");
		
		ObjectOutputStream os = new ObjectOutputStream(fo);
		
		os.writeObject(o);
		os.close();
		
		
	}

}
package serializacao;

import java.io.Serializable;

public class Player implements Serializable{
	
	private String classe;
	private int lvl;
	private String [] armas= new String[10];
	
	public Player(String c, int lvl, String[] a){
		classe = c;
		this.lvl = lvl;
		armas = a;
	}
		
	public String informacao(){
		String info =("Classe: "+ classe+", Level: "+lvl+", Armas: ");
		String teste= "";
		for (int i=0; i<armas.length; i++){
			teste += armas[i]+" ";
		}
		return (info + teste);

	}

}
package serializacao;

import java.io.IOException;
import java.io.Serializable;

import javax.swing.JOptionPane;

public class TestarPlayer {

	public static void main(String[] args) {
		
		Player um = new Player("Mago", 5, new String[]{"Magia", "Cajado", "Poções"});
		Player dois = new Player("Guerreiro", 4, new String[]{"Espada", "Machado"});
		Player tres = new Player("Elfo", 6, new String[]{"Arco e Flecha", "Espada", "Magia"});
		
		System.out.println(um.informacao());
		System.out.println(dois.informacao());
		System.out.println(tres.informacao());
		
		try {
			// Eu tinha feito dessa maneira: new Gravacao(um); + achei que fosse isso!!!
			Gravacao gUm = new Gravacao(um);
			Gravacao gdois = new Gravacao(dois);
			Gravacao gtres = new Gravacao(tres);
			JOptionPane.showMessageDialog(null, "Obejeto Gravado!!!", "Informativo...", 1);
			System.out.println("Objeto Gravado!!!");
		} catch (IOException e) {
			e.printStackTrace();
		}
		

	}

}
package serializacao;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class TestaPlayerLer {

	public static void main(String[] args) throws IOException, ClassNotFoundException{

		FileInputStream fi = new FileInputStream("exemplo.dat");
		ObjectInputStream oi = new ObjectInputStream(fi);
		
		//*************** Lendo o objeto... ***************
		Object um = oi.readObject();
		Object dois = oi.readObject();
		Object tres = oi.readObject();

		//************** Fechando a Conexão ***************
		oi.close();
		System.out.println("Objeto Recuparado");
		
		//************** Convertendo os Objetos ***********
		Player one = (Player) um;
		Player two = (Player) dois;
		Player three = (Player) tres;

		//********* Informações dos Objetos ***************
		System.out.println(one.informacao());
		two.informacao();
		three.informacao();
	}
}

1 Resposta

aluisiodsv

Coloque o código entre as tags code. Ele arruma sozinho seu código.

Tem esta opção no menu acima de onde vc escreve a mensagem.

Criado 12 de agosto de 2010
Ultima resposta 12 de ago. de 2010
Respostas 1
Participantes 2