GeeksforGeeks (Español)

La serialización es un mecanismo para convertir el estado de un objeto en un flujo de bytes. Deserialización es el proceso inverso donde el flujo de bytes se utiliza para recrear el objeto Java real en la memoria. Este mecanismo se utiliza para persistir el objeto.

El flujo de bytes creados es independiente de la plataforma. Por lo tanto, el objeto serializado en una plataforma puede ser deserializado en una plataforma diferente.,

para hacer un objeto Java serializable implementamos la interfaz java.io.Serializable.la clase ObjectOutputStream contiene el método writeObject () para serializar un objeto.

public final void writeObject(Object obj) throws IOException

la clase ObjectInputStream contiene el método readObject() para deserializar un objeto.

public final Object readObject() throws IOException, ClassNotFoundException

Ventajas de la Serialización
1. Para guardar / conservar el estado de un objeto.
2. Para viajar un objeto a través de una red.

solo se pueden serializar los objetos de esas clases que están implementando la interfaz java.io.Serializable.,
Serializable es una interfaz de marcador (no tiene miembro de datos ni método). Se utiliza para» marcar » las clases java para que los objetos de estas clases puedan obtener cierta capacidad. Otros ejemplos de interfaces de marcadores son: – Cloneable y remoto.

Puntos para recordar
1. Si una clase padre ha implementado la interfaz Serializable, entonces la clase hija no necesita implementarla, pero viceversa no es verdadera.
2. Solo los miembros de datos no estáticos se guardan a través del proceso de serialización.3. Los miembros de datos estáticos y los miembros de datos transitorios no se guardan mediante el proceso de serialización.,Por lo tanto, si no desea guardar el valor de un miembro de datos no estático, hágalo transitorio.
4. El Constructor de object nunca es llamado cuando un objeto es deserializado.
5. Los objetos asociados deben estar implementando una interfaz Serializable.
Ejemplo:

class A implements Serializable{// B also implements Serializable// interface.B ob=new B(); }

SerialVersionUID
El tiempo de ejecución de serialización asocia un número de versión con cada clase Serializable llamada SerialVersionUID, que se usa durante la deserialización para verificar que el remitente y el receptor de un objeto serializado han cargado clases para ese objeto que son compatibles con respecto a la serialización., Si el receptor ha cargado una clase para el objeto que tiene un UID diferente al de la clase del remitente correspondiente, la deserialización resultará en una InvalidClassException. Una clase Serializable puede declarar su propio UID explícitamente declarando un nombre de campo.debe ser estático, final y de tipo largo.
i.,e-ANY-ACCESS-MODIFIER static final long serialVersionUID=42L;

si una clase serializable no declara explícitamente un serialVersionUID, entonces el tiempo de ejecución de serialización calculará uno predeterminado para esa clase basado en varios aspectos de la clase, como se describe en la especificación de serialización de objetos de Java. Sin embargo, se recomienda encarecidamente que todas las clases serializables declaren explícitamente el valor serialVersionUID, ya que su cálculo es altamente sensible a los detalles de la clase que pueden variar dependiendo de las implementaciones del compilador, cualquier cambio en la clase o el uso de diferentes id puede afectar a los datos serializados.,

también se recomienda usar el modificador privado para UID ya que no es útil como miembro heredado.

serialver
serialver es una herramienta que viene con JDK. Se utiliza para obtener el número serialVersionUID para las clases Java.,
puede ejecutar el siguiente comando para obtener serialVersionUID

serialver

Ejemplo 1:



Salida :

Object has been serializedObject has been deserialized a = 1b = geeksforgeeks

Ejemplo 2:



Resultado:

Object has been serializedData before Deserialization.name = abage = 20a = 2b = 1000Object has been deserializedData after Deserialization.name = abage = 20a = 0b = 2000

Descripción de la Salida:
Usted ha visto mientras deserializar el objeto de los valores de a y b ha cambiado. La razón de ser a estaba marcada como transitoria y b era estática.,en el caso de variables transitorias: – una variable definida con palabra clave transitoria no se serializa durante el proceso de serialización.Esta variable se inicializará con el valor predeterminado durante la deserialización. (ej: para objetos es null, para int es 0).
En el caso de Variables estáticas: – una variable definida con la palabra clave estática no se serializa durante el proceso de serialización.Esta variable se cargará con el Valor Actual definido en la clase durante la deserialización.

Este artículo es contribuido por Mehak Narang y Shubham Juneja., Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando contribute.geeksforgeeks.org o envíe su artículo a [email protected]. vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.por favor, escriba comentarios si encuentra algo incorrecto, o si desea compartir más información sobre el tema discutido anteriormente.

Attention reader! No dejes de aprender ahora., Obtenga todos los conceptos importantes de Java Foundation y Collections con los fundamentos de Java y el curso de Java Collections a un precio amigable para los estudiantes y prepárese para la industria.

las Etiquetas de Artículo :

Java
Práctica de Etiquetas :

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *