Serialização de objetos

Capítulo 114

Tempo estimado de leitura: 4 minutos

+ Exercício
Audio Icon

Ouça em áudio

0:00 / 0:00

Serialização de Objetos em Java

A serialização de objetos é um mecanismo essencial na programação Java, permitindo que objetos sejam convertidos em uma sequência de bytes, que podem então ser armazenados em arquivos, transmitidos através de redes ou simplesmente mantidos em memória para uso posterior. O processo inverso, conhecido como desserialização, reconstitui o objeto a partir desta sequência de bytes.

Por Que Serializar Objetos?

Serializar objetos é útil em várias situações, como:

  • Salvar o estado de um objeto para uso futuro.
  • Enviar objetos através de uma rede em aplicações distribuídas.
  • Armazenar objetos em bancos de dados, convertendo-os em arrays de bytes.

Como Serializar Objetos em Java

Em Java, um objeto é serializável se sua classe implementa a interface java.io.Serializable. Esta interface é uma interface de marcação, ou seja, não possui métodos a serem implementados, mas indica à JVM que objetos dessa classe estão habilitados para serialização.


import java.io.Serializable;

public class ExemploObjeto implements Serializable {
    private static final long serialVersionUID = 1L;
    private String atributo;

    // Construtores, getters e setters
}

O campo serialVersionUID é um identificador único para a classe serializável, que é usado durante a desserialização para garantir que a classe carregada seja compatível com a versão serializada do objeto.

Para serializar um objeto, você pode usar ObjectOutputStream, que é um wrapper para um fluxo de saída que suporta a serialização de objetos.

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo


import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class Serializador {
    public static void serializar(String caminhoArquivo, ExemploObjeto objeto) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(caminhoArquivo))) {
            oos.writeObject(objeto);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Desserialização de Objetos

Para desserializar, você usa ObjectInputStream, que pode ler a sequência de bytes de um fluxo de entrada e reconstruir o objeto.


import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class Desserializador {
    public static ExemploObjeto desserializar(String caminhoArquivo) {
        ExemploObjeto objeto = null;
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(caminhoArquivo))) {
            objeto = (ExemploObjeto) ois.readObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return objeto;
    }
}

Considerações Importantes

Ao trabalhar com serialização, há várias considerações a serem levadas em conta:

  • Segurança: A serialização pode ser um vetor de ataque se os dados não forem devidamente validados durante a desserialização.
  • Compatibilidade de Versões: Alterações na classe serializada podem tornar versões anteriores incompatíveis, a menos que sejam gerenciadas cuidadosamente.
  • Transient Fields: Campos marcados com a palavra-chave transient não são serializados. Isso é útil para dados sensíveis ou para evitar serialização desnecessária.

Serialização Personalizada

Em casos onde você precisa de um controle mais refinado sobre o processo de serialização, você pode implementar os métodos writeObject e readObject na sua classe:


import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;

public class ExemploObjetoPersonalizado implements Serializable {
    private transient String atributoNaoSerializado;

    private void writeObject(ObjectOutputStream oos) throws IOException {
        oos.defaultWriteObject();
        // Código personalizado para serializar atributoNaoSerializado
    }

    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
        ois.defaultReadObject();
        // Código personalizado para desserializar atributoNaoSerializado
    }
}

Estes métodos permitem que você inclua lógica adicional durante a serialização e desserialização, como criptografar dados sensíveis ou incluir campos transientes.

Conclusão

A serialização de objetos é uma ferramenta poderosa em Java, que permite a persistência de objetos, comunicação entre processos e outras funcionalidades avançadas. No entanto, é necessário utilizá-la com cautela, considerando aspectos como segurança e compatibilidade de versões. Dominar a serialização e desserialização é fundamental para desenvolvedores Java que trabalham com aplicações que necessitam de troca de dados entre diferentes componentes ou sistemas.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações sobre serialização de objetos em Java é verdadeira?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

A interface java.io.Serializable é uma interface de marcação, em Java, que não possui métodos a serem implementados. Ela apenas sinaliza à JVM que os objetos da classe que a implementa são elegíveis para serialização.

Próximo capitúlo

Expressões lambda em Java

Arrow Right Icon
Capa do Ebook gratuito Aprenda programar em Java completo, da lógica de programação ao avançado
48%

Aprenda programar em Java completo, da lógica de programação ao avançado

5

(1)

238 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.