Dominando ObjectInputStream do Java: Guia Completo
Classe Java ObjectInputStream
Explore como ler objetos serializados em Java com ObjectInputStream, completo com exemplos passo a passo e dicas práticas.
A classe ObjectInputStream no pacote java.io permite desserializar objetos que foram previamente escritos por ObjectOutputStream. Ela estende a classe abstrata InputStream.
Como ObjectInputStream Funciona
Serialização transforma objetos Java em um stream de bytes que pode ser armazenado ou transmitido. Desserialização — o processo reverso — é tratada por ObjectInputStream, que lê o stream de bytes e reconstrói os objetos originais.
Criando um ObjectInputStream
Para criar um ObjectInputStream, primeiro importe a classe e então vincule-a a uma origem, tipicamente um FileInputStream:
// Vincula a um arquivo
FileInputStream fileStream = new FileInputStream("exemplo.dat");
// Envolve em um ObjectInputStream
ObjectInputStream objStream = new ObjectInputStream(fileStream);
Uma vez instanciado, objStream pode ler quaisquer objetos serializados do arquivo.
Métodos Principais do ObjectInputStream
Abaixo estão os métodos mais usados:
read()– Lê um único byte.readBoolean()– Lê um valor booleano.readChar()– Lê um caractere.readInt()– Lê um inteiro.readObject()– Reconstrói um objeto do stream.
Exemplo 1: Desserialização Básica
Abaixo está um exemplo mínimo que escreve um inteiro e uma string em um arquivo, depois os lê de volta.
import java.io.*;
public class Main {
public static void main(String[] args) {
int dado1 = 5;
String dado2 = "Isto é programiz";
try {
// Escreve dados
FileOutputStream fos = new FileOutputStream("arquivo.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(dado1);
oos.writeObject(dado2);
// Lê dados
FileInputStream fis = new FileInputStream("arquivo.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Dado inteiro :" + ois.readInt());
System.out.println("Dado string :" + ois.readObject());
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Saída
Dado inteiro :5 Dado string :Isto é programiz
Exemplo 2: Desserializando um Objeto Personalizado
Serializa e desserializa um objeto Dog simples. Lembre-se, a classe deve implementar Serializable para isso funcionar.
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 dog = new Dog("Tyson", "Labrador");
try {
// Serializa
FileOutputStream fos = new FileOutputStream("arquivo.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dog);
// Desserializa
FileInputStream fis = new FileInputStream("arquivo.txt");
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);
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Saída
Nome do Cachorro: Tyson Raça do Cachorro: Labrador
Principais conclusões:
- Use
ObjectOutputStreampara escrever objetos. - Use
ObjectInputStreampara lê-los de volta. - Apenas objetos que implementam
Serializablepodem ser serializados.
Métodos Adicionais do ObjectInputStream
| Método | Descrição |
|---|---|
available() | Retorna o número de bytes que podem ser lidos sem bloqueio. |
mark() | Marca a posição atual no stream. |
reset() | Reseta o stream para a marca mais recente. |
skipBytes(int n) | Pula n bytes. |
close() | Fecha o stream e libera recursos. |
Para insights mais profundos, visite a documentação oficial do Java.
Java
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Operador instanceof em Java: Guia Completo
- Dominando Herança em Java: Conceitos, Tipos e Exemplos Práticos
- Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
- Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
- Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
- Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão