una tipos serializar serializacion readobject guardar deserializacion como clase java

tipos - serializacion y deserializacion en java



Necesidad de serialización en Java (8)

Cuando desee guardar el estado de un objeto en un archivo o enviarlo a través de la red, deberá transformarlo en una serie de bytes. Esto se llama serialización.

Java tiene un mecanismo incorporado para eso, otras opciones incluyen XML o JSON.

Ejemplos cuando lo necesita: Almacenamiento en memoria caché de objetos, realización de llamadas a métodos remotos y almacenamiento de un gráfico de objetos en el disco.

¿Alguien puede decirme qué es la necesidad de Serialización en Java y un escenario de ejemplo para explicar la necesidad? No necesito la definición.


La serialización de Java (y, específicamente, las interfaces Serializable y Exernalizable ) le permite leer / escribir objetos Java arbitrariamente complicados, automática o manualmente desde / hacia el disco o desde / hacia la red. Mientras que XML y JSON son formatos de texto, la serialización de Java es un formato binario. (La serialización es también un concepto general de simplemente leer / escribir datos, pero como la pregunta es sobre Java, supongo que se refiere al sistema de serialización incorporado, es decir, Serializable / Exernalizable)

Ventajas de "implementa Serializable" sobre XML / JSON
Al principio, obtienes la serialización casi gratis. No necesita realizar muchos cambios en sus objetos para permitir que el mecanismo de serialización trabaje con él. Otra ventaja es que, debido a que es un formato binario, es mucho más compacto que el formato textual, por lo que probablemente use menos espacio (lo cual es bueno para conservar el ancho de banda de la red o para conservar espacio de almacenamiento en el disco).

Desventajas "implementa Serializable" sobre XML / JSON
La desventaja de la serialización Java integrada es que, si realiza cambios en su objeto, compatibilizar los diferentes formatos de serialización realmente puede ser una gran pesadilla. Además, si bien puede editar manualmente XML y JSON, no puede editar un objeto Java serializado (sin leerlo en Java). Por las mismas razones, a menudo es más fácil depurar XML y JSON que los formatos binarios, porque XML y JSON son legibles por el ser humano. Otra desventaja con el mecanismo de serialización incorporado de Java es que no puede serializar / deserializar (fácilmente) los datos de otro lenguaje de programación.

Técnicas alternativas para leer / escribir datos
Hay otras técnicas de serialización distintas a la serialización incorporada de Java que le ofrecen lo mejor de ambos mundos: formatos binarios compactos, interoperación de idiomas, facilidad de compatibilidad de versiones y herramientas de depuración que facilitan el volcado de los datos binarios en formato legible. Por ejemplo, los búferes de protocolo de fuente abierta de Google y MessagePack son ejemplos de bibliotecas / formatos de serialización que le permiten leer / escribir datos binarios compactos y mantener fácilmente la compatibilidad de versiones. La desventaja más grande de estas bibliotecas sobre la serialización de Java incorporada es que involucran objetos de datos simples para la serialización (a diferencia de los objetos de Java más completos que también tienen un comportamiento asociado con ellos); sin embargo, esta desventaja es, de hecho, una ventaja ya que separar el modelo de datos del cual / de la cual se almacena la información de los objetos que se envuelven o se derivan de ellos es en realidad una buena práctica de programación y hace que sea más fácil admitir formatos múltiples.

Uso
Como solicitó la necesidad, no solo la definición, existen varios casos de uso:

  1. Simplemente guarde sus datos para usarlos más tarde. Por ejemplo, digamos que estás escribiendo un videojuego. Tu programa no funcionará para siempre; incluso si nunca falla (que afortunadamente es el caso), su usuario probablemente saldrá del programa en algún momento o el sistema operativo puede matar el programa para guardar recursos (por ejemplo, en Android, los procesos en segundo plano con los que el usuario no interactúa son frecuentemente e intencionalmente asesinado por el sistema operativo para reclamar recursos del sistema como RAM). Para asegurarse de que el usuario no comienza desde el principio y puede reanudar desde donde estaba o desde el punto de guardado más reciente, querrá escribir el estado del juego en un almacenamiento persistente (es decir, el disco duro, la cuenta de Google Drive del usuario, etc.). Para hacer esto, necesita traducir las estructuras de datos en la memoria que representan el estado del juego a bytes sin formato que puede escribir en el disco (o en cualquier sistema que esté guardando los datos).

  2. Recuperando información de un servidor remoto. Continuemos con el ejemplo del juego ... supongamos que estás creando un juego multijugador en línea o que quieres que sea posible proporcionar nuevos niveles o elementos en el juego sin que el usuario actualice su aplicación. Para hacer esto, desearía que la información sobre el jugador en línea o la información sobre los nuevos niveles / elementos se comunique desde una computadora servidor (que usa como punto de contacto para todas las copias de la aplicación instalada en varios dispositivos) a las copias individuales de la aplicación. Tanto el servidor como la aplicación necesitan algún tipo de representación en memoria de estas estructuras de datos (por ejemplo, la ubicación de otros jugadores, la estructura de un nuevo nivel, la descripción / imagen de un nuevo elemento, etc.), pero para transferir la información desde el servidor hasta la aplicación en el dispositivo, el sistema de comunicación consiste en bytes sin procesar, por lo que es necesario tener una forma de convertir los datos a bytes sin formato y desde bytes sin procesar a una estructura de datos en memoria significativa.

Prácticamente cualquier comunicación entre dos procesos / aplicaciones diferentes o entre una aplicación y algún sistema de almacenamiento es un caso en el que se requiere algún tipo de mecanismo de serialización.


La serialización generalmente se denomina conversión de Object en series de bits. es uno esencial en Java, ya que Java significa principalmente para aplicaciones basadas en la web. Quiero hacer que los datos estén disponibles en toda la red.


La serialización generalmente se usa cuando surge la necesidad de enviar sus datos a través de la red o almacenados en archivos. Por datos me refiero a objetos y no a texto.

Ahora el problema es que su infraestructura de red y su disco duro son componentes de hardware que comprenden bits y bytes pero no objetos JAVA.

La serialización es la traducción de los valores / estados de su objeto Java a bytes para enviarlos a través de la red o guardarlos.

Esto es análogo a cómo su voz se transmite a través de líneas telefónicas PSTN.


Y también puede implementar la clonación de objetos utilizando la serialización


Cuento sobre serialización

Después de muchos años de duro trabajo, los científicos de la Tierra desarrollaron un robot que puede ayudarlos en el trabajo diario. Pero este robot tenía menos características que los robots desarrollados por los científicos del planeta Marte.

Después de una reunión entre los científicos de ambos planetas, se decidió que Marte enviará sus robots a la Tierra. Pero ocurrió un problema. El costo de enviar 100 robots a la Tierra fue de $ 100 millones. Y lleva alrededor de 60 días de viaje.

Finalmente, los científicos de Mar decidieron compartir su secreto con los científicos de la Tierra. Este secreto era sobre la estructura de la clase / robot. Los científicos de la Tierra desarrollaron la misma estructura en la Tierra misma. Los científicos de Mar serializaron los datos de cada robot y lo enviaron a la tierra. Los científicos de la Tierra deserializaron los datos y los alimentaron en cada robot en consecuencia.

Este proceso les ahorró tiempo al comunicar una gran cantidad de datos.

Algunos de los robots estaban siendo utilizados en algún trabajo defensivo en Marte. Entonces sus científicos marcaron algunas propiedades cruciales de esos robots como transitorios antes de enviar sus datos a la Tierra. Tenga en cuenta que la propiedad transitoria se establece en nulo (en caso de referencia) o en el valor predeterminado (en el caso del tipo primitivo) cuando el objeto se deserializa.

Un punto más que notaron los científicos de la Tierra es que los científicos de Marte les pidieron que crearan algunas variables estáticas para mantener los detalles sobre el medio ambiente. Estos detalles son utilizados por algunos robots. Pero los científicos de Marte no comparten estos detalles. Porque el entorno de la Tierra era diferente del entorno de Marte.

Aunque conocía la estructura de la clase del robot y tenía datos serializados, el científico de la Tierra no pudo deserializar los datos que pueden hacer que los robots funcionen.

Exception in thread "main" java.io.InvalidClassException: SerializeMe; local class incompatible: stream classdesc :

Los científicos de Marte esperaban el pago completo. Una vez que se realizó el pago, los científicos de Marte compartieron la versión en serie del UID con los científicos de la Tierra. El científico de la Tierra lo configuró en la clase de robot y todo comenzó a funcionar.

Actualizar

Aunque con la ayuda de la serialización, pudieron enviar datos usando señales en lugar de una nave espacial real, se dieron cuenta de que enviar un gran conjunto de datos seguía siendo un desafío. La serialización hace que el proceso sea más barato y rápido, pero aún así es lento. De ahí que los diferentes científicos idearon diferentes ideas para reducir el tamaño de los datos. Algunos científicos sugirieron comprimir los datos y algunos sugirieron utilizar un mecanismo diferente para representarlo y poder deserializarlo. Algunas de las ideas son XML , JSON , msgpack , निम्न (Nimn)


Serialización : -> Es el proceso de guardar (o) escribir el estado de un objeto en un archivo llamado serialización.

y la conversión de un formulario compatible con Java a formulario compatible con la red o formulario compatible con archivos. Al usar FileOutputStream y ObjectOutputStream podemos lograr el proceso de serialización.


  • Si desea almacenar un objeto (-estructura) en el disco necesitará serialización.
  • Un servicio web requiere la serialización de objetos a xml antes de que puedan ser transmitidos.