Serialization is a mechanism of converting the state of an object into a byte stream. Deserialização é o processo inverso onde o fluxo de byte é usado para recriar o objeto Java real na memória. Este mecanismo é usado para persistir o objeto.
O fluxo de bytes criado é independente de plataforma. Então, o objeto serializado em uma plataforma pode ser deserializado em uma plataforma diferente.,
para tornar um objeto Java serializável nós implementamos a interface java.io.serializável.
A classe ObjectOutputStream contém o método writeObject() para serializar um objeto.
public final void writeObject(Object obj) throws IOException
a classe ObjectInputStream contém o método de readObject() para deserializar um objeto.
public final Object readObject() throws IOException, ClassNotFoundException
Vantagens de Serialização
1. Para salvar / persistir o estado de um objeto.
2. Viajar um objecto através de uma rede.
apenas os objetos dessas classes podem ser serializados que estão implementando interface java.io.serializável.,
serializável é uma interface de marcador (não tem nenhum membro de dados e método). Ele é usado para “marcar” classes java para que objetos dessas classes possam ter certa capacidade. Outros exemplos de interfaces marcadoras são: – Clonáveis e remotas.
aponta para lembrar
1. Se uma classe pai implementou interface serializável, então a classe criança não precisa implementá-la, mas vice-versa não é verdade.
2. Apenas os membros de dados não-estáticos são salvos através do processo de serialização.
3. Os membros de dados estáticos e os membros de dados transientes não são salvos através do processo de serialização.,Então, se você não quiser salvar o valor de um membro de dados não-estático, em seguida, torná-lo transitório.
4. Constructor of object is never called when an object is deserialized.
5. Objetos associados devem estar implementando interface serializável.
Exemplo :
class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }
SerialVersionUID
A Serialização de tempo de execução associa um número de versão com cada classe Serializável chamado SerialVersionUID, que é utilizado durante a Desserialização para verificar se o remetente e o receptor de um objeto serializado de ter carregado classes para o objeto que são compatíveis com o respeito à serialização., Se o reciever carregou uma classe para o objeto que tem UID diferente do da classe do remetente correspondente, a Deserialização resultará em uma InvalidClassException. Uma classe serializável pode declarar seu próprio UID explicitamente declarando um nome de campo.deve ser estático, final e de tipo longo.
I.,e-ANY-ACCESS-MODIFIER static final long serialVersionUID=42L;
If a serializable class doesn’t explicitly declare a serialVersionUID, then the serialization runtime will calculate a default one for that class based on various aspects of class, as described in Java Object Serialization Specification. No entanto, é fortemente recomendado que todas as classes serializáveis declarem explicitamente o valor serialVersionUID, uma vez que seu cálculo é altamente sensível aos detalhes da classe que podem variar dependendo das implementações do compilador, qualquer mudança de classe ou usando id diferente pode afetar os dados serializados.,
também é recomendado o uso de modificador privado para UID, uma vez que não é útil como membro hereditário.
serialver
The serialver is a tool that comes with JDK. É usado para obter número serialVersionUID para classes Java.,
Você pode executar o seguinte comando para obter o serialVersionUID
serialver
Exemplo 1:
Resultado :
Object has been serializedObject has been deserialized a = 1b = geeksforgeeks
Exemplo 2:
Saída:
Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000
Descrição para a Saída:
Você tem visto ao desserializar o objeto os valores de a e b foi alterado. A razão de ser a foi marcada como transitória e b estática.,
In case of transient variables: – A variable defined with transient keyword is not serialized during serialization process.Esta variável será inicializada com o valor padrão durante a deserialização. (p. ex.: para objetos é nulo, para int é 0).
In case of static Variables: – A variable defined with static keyword is not serialized during serialization process.Esta variável será carregada com o valor actual definido na classe durante a deserialização.este artigo é contribuído por Mehak Narang e Shubham Juneja., Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou e-mail o seu artigo para [email protected]. Ver seu artigo publicado no GeeksforGeeks página principal e ajudar outros Geeks.
Por favor, escreva comentários se você encontrar alguma coisa incorreta, ou você quer compartilhar mais informações sobre o tópico discutido acima.Leitor de atenção! Não pares de aprender agora., Obtenha todos os conceitos importantes da Fundação Java e Coleções com os fundamentos do curso de Coleções Java e Java a um preço amigável para os estudantes e se torne a indústria pronta.Tags para artigos: