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. Neste artigo vamos descrever dois tipos de stream, o FileOutputStream e o FileInputStream para manipular objetos serializados.

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.

Como manipular objetos serializados

Para o nosso exemplo eu irei descrever a gravação / leitura de objetos serializados em um arquivo. Também serão utilizadas duas classes chamadas 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.

Nosso próximo artigo será sobre a manipulação de arquivos XML com o JDOM.

Links Úteis

  • Segurança de web services em Java com controle de acesso: Neste curso vamos aprender a programar um mecanismo de autorização para controle de acesso às diferentes funcionalidades oferecidas por uma Web API RESTful, configurando para três tipos de usuário (cliente, funcionário e administrador) diferentes tipos de permissão.
  • Curso de Yarn: Neste curso aprenderemos o que é o Yarn: um gerenciador de dependências concorrente do NPM que promete ser mais rápido e eficiente que este.
  • Curso de Web services RESTful com Spring framework e JPA: Neste curso você vai aprender a criar sua primeira API REST baseada nos recursos do Spring Framework. Veremos como declarar corretamente os verbos HTTP em cada recurso consumido e também como definir, de forma apropriada, o status de cada resposta fornecida pela API.

Saiba mais sobre Java ;)

  • Guia de Java: Encontre aqui os Guias de estudo que vão ajudar você a aprofundar seu conhecimento na linguagem Java. Desde o básico ao mais avançado. Escolha o seu!
  • Cursos de Java Online: Torne-se um programador Java completo. Aqui você encontra cursos sobre as mais ferramentas e frameworks do universo Java. Aprenda a desenvolver sites e web services com JSF, Jersey, Hibernate e mais.
  • O que é Spring?: Neste curso você aprenderá o que é o Spring, framework Java criado com o objetivo de facilitar o desenvolvimento de aplicações e que explora, para isso, os conceitos de inversão de controle e injeção de dependências.