He leído bastantes artículos sobre serialización y cómo es tan agradable y genial, pero ninguno de los argumentos fue lo suficientemente convincente. Me pregunto si alguien realmente puede decirme qué es lo que realmente podemos lograr al serializar una clase.
105
Respuestas:
Primero definamos la serialización, luego podemos hablar sobre por qué es tan útil.
La serialización es simplemente convertir un objeto existente en una matriz de bytes. Esta matriz de bytes representa la clase del objeto, la versión del objeto y el estado interno del objeto. Esta matriz de bytes se puede usar entre JVM que ejecutan el mismo código para transmitir / leer el objeto.
¿Por qué querríamos hacer esto?
Hay varias razones:
Comunicación: si tiene dos máquinas que ejecutan el mismo código y necesitan comunicarse, una forma fácil es que una máquina cree un objeto con información que le gustaría transmitir y luego serialice ese objeto a la otra máquina. No es el mejor método de comunicación, pero hace el trabajo.
Persistencia: si desea almacenar el estado de una operación en particular en una base de datos, se puede serializar fácilmente en una matriz de bytes y almacenar en la base de datos para su posterior recuperación.
Copia profunda: si necesita una réplica exacta de un objeto y no quiere tomarse la molestia de escribir su propia clase clone () especializada, simplemente serialice el objeto en una matriz de bytes y luego deserialice a otra objeto logra este objetivo.
Almacenamiento en caché: en realidad, solo una aplicación de lo anterior, pero a veces un objeto tarda 10 minutos en compilarse, pero solo 10 segundos en deserializar. Entonces, en lugar de retener el objeto gigante en la memoria, simplemente almacénelo en un archivo mediante serialización y léalo más tarde cuando sea necesario.
Sincronización cruzada de JVM: la serialización funciona en diferentes JVM que pueden estar ejecutándose en diferentes arquitecturas.
fuente
Mientras ejecuta su aplicación, todos sus objetos se almacenan en la memoria (RAM). Cuando sale, esa memoria es reclamada por el sistema operativo y su programa esencialmente 'olvida' todo lo que sucedió mientras se estaba ejecutando. La serialización soluciona esto permitiendo que su aplicación guarde objetos en el disco para que pueda leerlos la próxima vez que se inicie. Si su aplicación va a proporcionar alguna forma de guardar / compartir un estado anterior, necesitará alguna forma de serialización.
fuente
Puedo compartir mi historia y espero que dé algunas ideas por qué es necesaria la serialización. Sin embargo, las respuestas a su pregunta ya son muy detalladas.
Tenía varios proyectos que necesitaban cargar y leer un montón de archivos de texto. Los archivos contenían palabras vacías, verbos biomédicos, abreviaturas biomédicas, palabras conectadas semánticamente entre sí, etc. El contenido de estos archivos es simple: ¡ palabras !
Ahora, para cada proyecto, necesitaba leer las palabras de cada uno de estos archivos y ponerlas en diferentes matrices; como el contenido del archivo nunca cambió, se convirtió en una tarea común, aunque redundante, después del primer proyecto.
Entonces, lo que hice fue que creé un objeto para leer cada uno de estos archivos y para poblar matrices individuales (variables de instancia de los objetos). Luego serialicé los objetos y luego, para los proyectos posteriores, simplemente los deserialicé. No tuve que leer los archivos y llenar las matrices una y otra vez.
fuente
En esencia :
Ver usos de Wiki :
La serialización tiene varias ventajas. Proporciona:
fuente
La más obvia es que puede transmitir la clase serializada a través de una red y el receptor puede construir un duplicado de la instancia original. Asimismo, puede guardar una estructura serializada en un sistema de archivos.
Además, tenga en cuenta que la serialización es recursiva, por lo que puede serializar una estructura de datos heterogénea completa de una sola vez, si lo desea.
fuente
Los objetos serializados mantienen el estado en el espacio, se pueden transferir a través de la red, sistema de archivos, etc ... y en el tiempo, pueden sobrevivir a la JVM que los creó.
A veces esto es útil.
fuente
Utilizo objetos serializados para estandarizar los argumentos que paso a funciones o constructores de clases. Pasar un bean serializado es mucho más limpio que una larga lista de argumentos. El resultado es un código que es más fácil de leer y depurar.
fuente
Con el simple propósito de aprender (fíjense, dije aprender, no dije lo mejor, ni siquiera bueno, pero solo para entender las cosas), puede guardar sus datos en un archivo de texto en la computadora, luego tener un programa que lee esa información, y según el archivo, puede hacer que su programa responda de manera diferente. Si fuera más avanzado, no necesariamente tendría que ser un archivo txt, sino algo más.
Serializar, por otro lado, pone las cosas directamente en lenguaje informático. Es como si le estuvieras contando a una computadora en español algo en español, en lugar de decirle algo en francés, obligándolo a aprender francés y luego guardar las cosas en su español nativo traduciéndolo todo. No es la respuesta más intensiva en tecnología, solo estoy tratando de crear un ejemplo comprensible en un formato de lenguaje común.
La serialización también es más rápida, porque en Java, los objetos se manejan en el montón y toman mucho más tiempo que si estuvieran representados como primitivos en la pila. Velocidad, velocidad, velocidad. Y menos procesamiento de archivos desde el punto de vista del programador.
fuente