0Pricing
Java Academy · Aula

Fundamentos da Serialização em Java

Implemente Serializable, escreva objetos em fluxos com ObjectOutputStream e leia-os novamente.

Fundamentos da Serialização em Java é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

O que é a serialização do Java?

A serialização converte o estado de um objeto em um fluxo de bytes para que ele possa ser salvo em disco, enviado por uma rede ou armazenado em um banco de dados. A desserialização reverte o processo.

A interface marcadora Serializable

Para serializar uma classe, implemente java.io.Serializable. Ela não possui métodos — sinaliza à JVM que as instâncias dessa classe podem ser serializadas.

import java.io.Serializable;
public class User implements Serializable {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override public String toString() { return name + " / " + age; }
}

Gravando um objeto com ObjectOutputStream

Envolva um FileOutputStream em um ObjectOutputStream e chame writeObject() para serializar.

import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("user.ser"))) {
    oos.writeObject(new User("Alice", 30));
    System.out.println("Serialized successfully");
}

Lendo um objeto com ObjectInputStream

Envolva um FileInputStream em um ObjectInputStream e chame readObject() para desserializar. Converta o resultado para o tipo esperado.

import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream("user.ser"))) {
    User u = (User) ois.readObject();
    System.out.println("Deserialized: " + u);
}

Serialização de um Grafo de Objetos

Todos os objetos referenciados pelo objeto serializado também devem implementar Serializable; caso contrário, uma NotSerializableException será lançada em tempo de execução.

public class Order implements Serializable {
    private User customer;   // User must be Serializable
    private List<String> items;
    public Order(User customer, List<String> items) {
        this.customer = customer;
        this.items = items;
    }
}

NotSerializableException

Se algum campo do grafo de objetos não for serializável nem estiver marcado como transient, Java lançará NotSerializableException no momento da gravação.

// Thread is NOT Serializable
public class Task implements Serializable {
    private Thread worker; // throws NotSerializableException!
    // Fix: mark as transient
    private transient Thread worker2;
}

O Grafo de Objetos e as Referências Compartilhadas

Java acompanha a identidade dos objetos durante a serialização. Se dois campos referenciarem o mesmo objeto, apenas uma cópia será gravada, e ambos os campos apontarão para a mesma instância desserializada.

Serialização de Coleções

Coleções padrão, como ArrayList, HashMap e LinkedList, já implementam Serializable; portanto, são serializadas desde que seus elementos também sejam.

List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("names.ser"))) {
    oos.writeObject(names);
}

Herança e Serialização

Se uma superclasse for Serializable, todas as subclasses também serão serializáveis. Se a superclasse NÃO for serializável, os campos da superclasse não serão salvos; a superclasse deverá ter um construtor sem argumentos para a desserialização.

Verificação do Fluxo de Bytes

O fluxo de bytes serializado começa com os bytes mágicos 0xACED 0x0005. Você pode inspecioná-lo com um editor hexadecimal ou decodificá-lo com as ferramentas SerialVer para entender o formato.

Aviso de Segurança

A desserialização de Java é um vetor de ataque conhecido. Nunca desserialize dados de fontes não confiáveis sem validação. Prefira JSON, Protobuf ou envelopes assinados para dados externos.

Verificação Rápida

Qual método serializa um objeto em um fluxo?

Recapitulação

A serialização de Java usa ObjectOutputStream / ObjectInputStream. As classes devem implementar Serializable. Evite serializar dados não confiáveis — prefira alternativas modernas para código novo.

Perguntas Frequentes

A aula “Fundamentos da Serialização em Java” é grátis?

Sim — o texto completo de “Fundamentos da Serialização em Java” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Fundamentos da Serialização em Java”?

Implemente Serializable, escreva objetos em fluxos com ObjectOutputStream e leia-os novamente. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Fundamentos da Serialização em Java”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fundamentos da Serialização em Java
  2. Campos transient e serialVersionUID
  3. Serialização Personalizada: writeObject e readObject
  4. Alternativas Modernas: JSON e Protocol Buffers
← Voltar para Java Academy