Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos

Classe Java ObjectOutputStream

Explore a API Java ObjectOutputStream, seus métodos principais e exemplos passo a passo que demonstram como serializar objetos em arquivos e lê-los de volta.

A classe ObjectOutputStream do pacote java.io permite escrever objetos Java para que possam ser lidos posteriormente por ObjectInputStream. Ela estende OutputStream e é a espinha dorsal do mecanismo de serialização embutido do Java.


Como ObjectOutputStream Funciona

Quando você escreve um objeto em um ObjectOutputStream, o framework codifica o nome da classe do objeto, valores de campos e informações de tipo em um formato binário — um processo conhecido como serialização. O stream de bytes resultante pode ser armazenado em um arquivo, transmitido pela rede ou até mesmo incorporado na memória.

Importante: Apenas objetos que implementam java.io.Serializable podem ser serializados. Esta interface atua como um marcador para informar ao runtime que um objeto é seguro para ser persistido ou transmitido.


Criando um ObjectOutputStream

Comece importando a classe:

import java.io.ObjectOutputStream;

Então, vincule-a a um FileOutputStream ou qualquer outro OutputStream subjacente:

// Escreve em um arquivo chamado "dados.bin"
FileOutputStream fileStream = new FileOutputStream("dados.bin");
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);

Aqui, objStream está pronto para serializar objetos em fileStream.


Métodos Principais do ObjectOutputStream

A classe herda um conjunto de métodos de OutputStream e adiciona outros especializados para manipulação de objetos:


Exemplo 1: Serializando Dados Primitivos e String

Abaixo está um snippet completo que escreve um int e uma String em um arquivo, depois os lê de volta usando ObjectInputStream:

import java.io.*;

public class Main {
    public static void main(String[] args) {
        int dado1 = 5;
        String dado2 = "Isto é programiz";
        try {
            // Escreve objetos
            FileOutputStream fos = new FileOutputStream("arquivo.bin");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeInt(dado1);
            oos.writeObject(dado2);
            oos.close();
            // Lê objetos
            FileInputStream fis = new FileInputStream("arquivo.bin");
            ObjectInputStream ois = new ObjectInputStream(fis);
            System.out.println("Dado inteiro :" + ois.readInt());
            System.out.println("Dado string :" + ois.readObject());
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Saída

Dado inteiro :5
Dado string :Isto é programiz

Exemplo 2: Serializando um Objeto Personalizado

Para serializar uma classe definida pelo usuário, simplesmente implemente Serializable:

import java.io.*;

class Dog implements Serializable {
    String nome;
    String raca;
    Dog(String nome, String raca) {
        this.nome = nome;
        this.raca = raca;
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog1 = new Dog("Tyson", "Labrador");
        try {
            // Escreve o objeto
            FileOutputStream fos = new FileOutputStream("dog.bin");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(dog1);
            oos.close();
            // Lê o objeto
            FileInputStream fis = new FileInputStream("dog.bin");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Dog novoDog = (Dog) ois.readObject();
            System.out.println("Nome do Cachorro: " + novoDog.nome);
            System.out.println("Raça do Cachorro: " + novoDog.raca);
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Saída

Nome do Cachorro: Tyson
Raça do Cachorro: Labrador

A classe Dog deve implementar Serializable porque ObjectOutputStream só pode escrever objetos serializáveis.


Operações Adicionais do ObjectOutputStream

Método Descrição
flush() Força quaisquer bytes de saída em buffer para o stream subjacente.
drain() Libera dados em buffer (disponível no Java 9+).
close() Fecha o stream e libera quaisquer recursos do sistema.

Para um mergulho mais profundo, consulte a documentação oficial do Java.

Java

  1. Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
  2. Operador instanceof em Java: Guia Completo
  3. Dominando Herança em Java: Conceitos, Tipos e Exemplos Práticos
  4. Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
  5. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  6. Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
  7. Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
  8. Dominando ArrayList em Java: Operações, Métodos e Boas Práticas
  9. Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
  10. Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão