[Resolvido]Como recuperar dados de objeto serializado?

2 respostas
M

Olá pessoal do GUJ!
Minha dúvida é a seguinte:
Eu tenho um objeto serializado mas na hora de obter as informações desse objeto eu não consigo separá-las, ou seja, na deserialização do objeto os dados ficam concatenados como vocês podem ver abaixo...

init:
deps-jar:
compile:
Objeto gravado com sucesso!
Recuperando objeto: 
teste 123

Estas são minhas classes:

public class Main {
    Dados dado = null;
    
    public Main(){
        
    }
    
    public static void serializa(Dados dad){
        try{
            FileOutputStream arquivoGrav = new FileOutputStream("c:/serializado.dat");
            //Classe responsavel por inserir os objetos
            ObjectOutputStream objGravar = new ObjectOutputStream(arquivoGrav);
            //Grava o objeto cliente no arquivo
            objGravar.writeObject(dad);
            objGravar.flush();
            objGravar.close();
            arquivoGrav.flush();
            arquivoGrav.close();
            System.out.println("Objeto gravado com sucesso!");           
            //boolean success = (new File("C:/serializado.mrc")).delete();  
        }
        catch(Exception e){
            
        }
    }
    
    public static void diserializa(String caminho){
        System.out.println("Recuperando objeto: ");
        try{
            //Carrega o arquivo
            FileInputStream arquivoLeitura = new FileInputStream("c:/serializado.dat");
            //Classe responsavel por recuperar os objetos do arquivo
            ObjectInputStream objLeitura = new ObjectInputStream(arquivoLeitura);
            System.out.println(objLeitura.readObject());
            objLeitura.close();
            arquivoLeitura.close();
            
        }
        catch( EOFException e ){
                e.printStackTrace( );
        }
        catch(Exception e){
            e.printStackTrace();
            
        }
    }
    
    public static void main(String[] args){
        Dados dados = new Dados("teste", 123);
        serializa(dados);
        diserializa("C:/serializado.dat");
    }
}
public class Dados implements Serializable{
    private String nome = "";
    private int numero = 0;
    
    public Dados(String nome, int numero){
        super();
        this.nome = nome;
        this.numero = numero;       
    }

    public String getNome() {
        return nome;
    }

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

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }
    
    public String toString(){
        return this.nome + " " + this.numero;
    }

}

2 Respostas

L

public static void diserializa(String caminho) { System.out.println("Recuperando objeto: "); try { // Carrega o arquivo FileInputStream arquivoLeitura = new FileInputStream( "C:/Documents and Settings/leonardo.ramos/Meus documentos/serializado.dat"); // Classe responsavel por recuperar os objetos do arquivo ObjectInputStream objLeitura = new ObjectInputStream(arquivoLeitura); // System.out.println(objLeitura.readObject()); // essa parte eu incluí, note a diferença pro teu código Dados dado = (Dados) objLeitura.readObject(); System.out.println(dado.getNome()); System.out.println(dado.getNumero()); // aqui acaba a parte que eu incluí objLeitura.close(); arquivoLeitura.close(); } catch (EOFException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }

O esquema é o seguinte… você mandou simplesmente imprimir o objeto com o ‘readObject’.
Quando você desserializa o objeto, ele retorna um objeto da classe ‘Object’.
O que você tem que fazer é fazer o type cast pra criar um objeto da sua classe quando ele retornar, e daí você utiliza os métodos da mesma.

Abraço!

M

leoramos:
public static void diserializa(String caminho) { System.out.println("Recuperando objeto: "); try { // Carrega o arquivo FileInputStream arquivoLeitura = new FileInputStream( "C:/Documents and Settings/leonardo.ramos/Meus documentos/serializado.dat"); // Classe responsavel por recuperar os objetos do arquivo ObjectInputStream objLeitura = new ObjectInputStream(arquivoLeitura); // System.out.println(objLeitura.readObject()); // essa parte eu incluí, note a diferença pro teu código Dados dado = (Dados) objLeitura.readObject(); System.out.println(dado.getNome()); System.out.println(dado.getNumero()); // aqui acaba a parte que eu incluí objLeitura.close(); arquivoLeitura.close(); } catch (EOFException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }

O esquema é o seguinte… você mandou simplesmente imprimir o objeto com o ‘readObject’.
Quando você desserializa o objeto, ele retorna um objeto da classe ‘Object’.
O que você tem que fazer é fazer o type cast pra criar um objeto da sua classe quando ele retornar, e daí você utiliza os métodos da mesma.

Abraço!

Teve outra coisa que meu professor me falou, a exceção que é lançada é a EOFException (End Of File Exception - Fim do Arquivo), isso ocorre porque no meu código além de eu ter lido dados do objeto, na linha seguinte repito a operação, ou seja, é como se o ponteiro do arquivo já estivesse apontando para a próxima linha, como ela não existe dá a exceção.
Obrigado leoramos, e obrigado também ao meu professor M…

Criado 13 de agosto de 2008
Ultima resposta 13 de ago. de 2008
Respostas 2
Participantes 2