uso tipos serializar serialización serializacion interfaz deserializacion como clase java io serializable scjp

java - serializar - tipos de serializacion



Uso de Serializable que no sea de escritura y lectura a/desde archivo (7)

En qué casos es una buena práctica de codificación utilizar implementos serializables que no sean objetos de escritura y lectura desde / hacia el archivo. En un proyecto, pasé por el código. Una clase que utiliza implementos serializables incluso si en esa clase / proyecto no hay ningún objeto de escritura / lectura de objetos en / desde el archivo?


En versiones anteriores de java (antes de java 5), ​​las interfaces de marcadores eran una buena forma de declarar metadatos, pero actualmente tenemos una anotación que es más poderosa para declarar metadatos para las clases.

La anotación proporciona la capacidad muy flexible y dinámica, y podemos proporcionar la configuración para metadación meta detale que o bien queremos enviar esa información en código de bytes o en tiempo de ejecución.

Aquí Si no estás dispuesto a leer y escribir objetos, entonces queda un propósito de la serialización: declarar metadatos para la clase y si quieres declarar los metadatos para la clase, entonces personalmente te sugiero que no utilices la serialización simplemente anota .

La anotación es una mejor opción que la interfaz de marcador y JUnit es un ejemplo perfecto de uso de la anotación, por ejemplo, @Test para especificar una clase de prueba. Lo mismo también se puede lograr usando la interfaz del marcador de prueba.

Hay un ejemplo más que indica que las anotaciones son una mejor opción @ThreadSafe se ve mucho mejor que la implementación de la interfaz de marcador de ThraedSafe.


Hay otros casos en los que desea enviar un objeto por valor en lugar de por referencia:

  • Envío de objetos a través de la red.

Realmente no puedo enviar objetos por referencia aquí.

  • Multithreading, particularmente en Android

Android usa Serializable / Parcelable para enviar información entre Actividades. Tiene algo que ver con el mapeo de memoria y el multihilo. Realmente no entiendo esto sin embargo.


Si alguna vez espera que su objeto se use como datos en una configuración de RMI, deberían ser serializables, ya que RMI necesita objetos Serializable (si van a ser serializados y enviados al lado remoto) o ser UnicastRemoteObject si necesita una referencia remota


Beneficios de la serialización:

  1. Para persistir los datos para uso futuro.

  2. Para enviar datos a una computadora remota usando tecnologías Java cliente / servidor como RMI, programación de socket, etc.

  3. Aplanar un objeto en una matriz de bytes en la memoria.

  4. Para enviar objetos entre los servidores en un clúster.

  5. Para intercambiar datos entre applets y servlets.

  6. Para almacenar la sesión del usuario en aplicaciones web

  7. Para activar / pasivar enterprise java beans.

Puede consultar este artículo para más detalles.


Algunos marcos / entornos pueden depender de que los objetos de datos sean serializables. Por ejemplo, en J2EE , los atributos HttpSession deben ser serializables para beneficiarse de la Persistencia de la sesión . También RMI y otros artefactos de las edades oscuras usan la serialización.

Por lo tanto, aunque es posible que no necesite inmediatamente que sus objetos de datos sean serializables, podría tener sentido declarar Serializable por si acaso (es casi gratuito, a menos que tenga que pasar por el dolor de declarar métodos readObject / writeObject )


Junto con la respuesta de Martin C , quiero agregar que, si usa Serializable , puede cargar fácilmente su gráfico Object en la memoria. Por ejemplo, tienes una clase de Student que tiene un Deportment . Entonces, si serializas a tu Student entonces el Department también se guardará. Además, también te permite:

1. cambiar el nombre de las variables en una clase serializada mientras se mantiene la compatibilidad con versiones anteriores.
2. para acceder a los datos de los campos eliminados en una nueva versión (en otras palabras, cambie la representación interna de sus datos manteniendo compatibilidad hacia atrás).


Si el objeto sale de la JVM en la que se creó, la clase debe implementar Serializable.

La serialización es un método mediante el cual un objeto se puede representar como una secuencia de bytes que incluye los datos del objeto, así como información sobre el tipo del objeto y los tipos de datos almacenados en el objeto.

Después de escribir un objeto serializado en un archivo, se puede leer del archivo y deserializar, es decir, la información de tipo y los bytes que representan el objeto y sus datos se pueden usar para recrear el objeto en la memoria.

Este es el objetivo principal de la deserialización. Para obtener la información del objeto, el tipo de objeto, la información del tipo de variable desde una representación escrita (en términos generales) de un objeto. Y, por lo tanto, se requiere serialización en primer lugar para que esto sea posible.

Entonces, cada vez que su objeto tenga la posibilidad de abandonar la JVM, el programa se está ejecutando, debe hacer la clase, implementar Serializable.

Leer / Escribir objetos en archivos (Memoria), o pasar un objeto a través de Internet o cualquier otro tipo de conexión. Cada vez que el objeto abandona la JVM en la que se creó, debe implementar Serializable, de modo que se pueda serializar y deserializar para su reconocimiento una vez que entre en otra / misma JVM.

Muchas buenas lecturas en: