Conforme a Wikipédia, a serialização (ou serialisation) é o processo de tradução de estruturas de dados ou um objeto do estado em um formato que podem ser armazenados (por exemplo, em um arquivo ou buffer de memória) ou transmitida (por exemplo, através de uma conexão de rede link) e reconstruída mais tarde (possivelmente em um ambiente de computador diferente).Quando a série resultante de bits é relida de acordo com o formato de serialização, ele pode ser usado para criar um clone semanticamente idêntico do objeto original.,
então, basicamente, a Serialização é um processo de conversão de um objeto em uma seqüência de bytes que pode ser transferido para um disco ou banco de dados ou podem ser enviadas através de fluxos. O processo reverso de criação de objeto a partir da sequência de bytes é chamado de deserialização.
Serialization and Deserialization in java
To serialize and deserialize our object to a file we need to call ObjectOutputStream.writeObject()
and ObjectInputStream.readObject()
.,
A class must implement Serializable interface present in java.io
package in order to serialize its object successfully. Serializável é uma interface de marcador que adiciona comportamento serializável à classe que a implementa.
o Java oferece Serializable API encapsulado em java.io
pacote para serialização e desserialização de objetos que incluem,
java.io.serializable
java.io.Externalizable
ObjectInputStream
- e
ObjectOutputStream
etc.,
Pontos de 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 da serialização process.So, 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.
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 receptor carregou uma classe para o objeto que tem UID diferente do da classe do remetente correspondente, a Deserialização resultará em uma Invalidclassexcepção. 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.
no caso de variáveis transitórias: – uma variável definida com palavra-chave transitória não é serializada durante o processo de serialização.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.,
Serialization in java
Deserialization
Contact field is null because,it was marked as static and as we have discussed earlier static fields does not get serialized.
Nota: os membros estáticos nunca são serializados porque eles estão conectados a classe não objeto de classe.
- serialização é o processo de salvar o estado de um objeto para uma sequência de bytes que então pode ser armazenado em um arquivo ou enviado sobre a rede e deserialização é o processo de reconstruir um objeto a partir desses bytes.,
- apenas subclasses da interface
podem ser serializadas.
- Se a nossa classe não implementa
Serializable
interface ou se ele está tendo uma referência para um nãoSerializable
classe, em seguida, a JVM vai jogarNotSerializableException
. - All
transient
andstatic
fields do not get serialized. -
serialVersionUID
é usado para verificar que o serializados e desserializados objetos têm os mesmos atributos e, portanto, são compatíveis com a desserialização., - devemos criar um campo
serialVersionUID
na nossa classe, por isso, se alterarmos a nossa estrutura de classes (Adicionar/Remover campos), o JVM não passará porInvalidClassException
. Se não fornecermos a TI, a JVM fornece uma que pode mudar quando a nossa estrutura de classes mudar. - podemos substituir a serialização padrão de comportamento dentro da nossa classe Java fornecendo a implementação de
writeObject
ereadObject
métodos., - E a que podemos chamar de
ObjectOutputStream.defaultWriteObject()
eObjectInputStream.defaultReadObject
dewriteObject
ereadObject
métodos para obter o padrão de serialização e desserialização de lógica. - podemos jogar
NotSerializableException
exceção dewriteObject
ereadObject
, se não queremos que nossa classe para ser serializado ou anular a serialização.
Leave a Reply