quarta-feira, 21 de agosto de 2013

Serializar objetos



Quando dizemos que um objeto é serializado, estamos afirmando que este objeto será transformado em bytes, e poderá ser armazenado em disco ou transmitido por um stream. 

O stream é um objeto de transmissão de dados, onde um fluxo de dados serial é feito através de uma origem e de um destino.  Tomemos dois tipos de Streamers:

O FileOutputStream é um fluxo de arquivo que permite a gravação em disco.  Já o FileInputStream é justamente o contrário, permitindo a leitura de um arquivo em disco.

Tomemos também duas classes: ObjectInputStream e ObjectOutputStream. Elas são responsáveis por inserir e recuperar objetos serializados do stream.

Vamos ao exemplo, primeiro vamos desenvolver a classe chamada cliente, que será utilizada como Objeto serial de armazenamento:

import java.io.Serializable;
//A classe deve implementar Serializable
public class Cliente implements Serializable
{

    private String nome; 
    private char sexo; 
    private String cpf;

    public Cliente( String nome, char sexo, String cpf )    {
        super( );
        this.nome = nome;
        this.sexo = sexo;
        this.cpf = cpf;
    }

    public String getCpf( )    {
        return cpf;    }

    public void setCpf( String cpf )    {
        this.cpf = cpf;    }

    public String getNome( )    {
        return nome;    }

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

    public char getSexo( )    {
        return sexo;    }

    public void setSexo( char sexo )    {
        this.sexo = sexo;    }

    public String toString( )    {
        return this.nome + " / " + "Sexo: " + this.sexo + "\n" + "CPF: "
            + this.cpf;    }
}

Abaixo segue a main que executará a gravação e a leitura de objetos em um arquivo.

package br.com.artigos.serial;

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

public class ExemploStream
{
   
    public static void main( String[] args )
    {
     // Cria o objeto serializado
     Cliente cliente = new Cliente("Glaucio Guerra",'M',"0000000001");
        try
        {
            //Gera o arquivo para armazenar o objeto
            FileOutputStream arquivoGrav =
                      new FileOutputStream("/Users/glaucio/Desktop/saida.dat");
            //Classe responsavel por inserir os objetos
            ObjectOutputStream objGravar = new ObjectOutputStream(arquivoGrav);
            //Grava o objeto cliente no arquivo
            objGravar.writeObject(cliente);
            objGravar.flush();
            objGravar.close();
            arquivoGrav.flush();
            arquivoGrav.close();
            System.out.println("Objeto gravado com sucesso!");
        }
        catch( Exception e ){
                e.printStackTrace( );
        }
       
        System.out.println("Recuperando objeto: ");
        try
        {
            //Carrega o arquivo
            FileInputStream arquivoLeitura = new FileInputStreamc:/saida.dat");
            //Classe responsavel por recuperar os objetos do arquivo
            ObjectInputStream objLeitura =  new ObjectInputStream(arquivoLeitura);
            System.out.println(objLeitura.readObject());
            objLeitura.close();
            arquivoLeitura.close();
        }
        catch( Exception e ){
                e.printStackTrace( );
        }
    }
}



Saída:

Objeto gravado com sucesso!
Recuperando objeto:
Glaucio Guerra / Sexo: M
CPF: 0000000001


Existem diversas aplicações que utilizam o recurso de serialização. O Hibernate, streams para JME, e qualquer outro tipo de aplicação que trabalhe com fluxo de I/O. Qualquer tipo de trabalho que envolver persistência ou tramitação de dados, a serialização é necessária.

Nenhum comentário:

Postar um comentário