variable - ¿Cuál es el propósito de la serialización en Java?
serializacion y deserializacion en java (8)
Con el simple propósito de aprender (aviso, dije aprender, no dije mejor, o incluso bueno, pero solo para entender cosas), podría guardar sus datos en un archivo de texto en la computadora, luego tener un programa que lea esa información, y basado en el archivo, podría hacer que su programa responda de manera diferente. Si fueras más avanzado, no necesariamente tendría que ser un archivo de texto, sino algo más.
La serialización por otro lado, pone las cosas directamente en el lenguaje de la computadora. Es como si estuvieras diciéndole a una computadora en español algo en español, en lugar de contarle algo en francés, forzándolo a aprender francés, y luego guardar cosas en su español nativo traduciendo todo. No es la respuesta más tecnológica, solo intento 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 de un programador.
He leído un buen número de artículos sobre Serialización y cómo es tan bueno 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.
El más obvio es que puede transmitir la clase serializada a través de una red, y el receptor puede construir un duplicado de la instancia original. Del mismo modo, 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 en un swop foop, si lo desea.
Los objetos serializados mantienen el estado en el espacio, se pueden transferir a través de la red, el sistema de archivos, etc. ... y el tiempo, pueden sobrevivir a la JVM que los creó.
Algunas veces esto es útil.
Mientras ejecuta su aplicación, todos sus objetos se almacenan en la memoria (RAM). Cuando sale, el sistema operativo recupera esa memoria y su programa esencialmente ''olvida'' todo lo que sucedió mientras se estaba ejecutando. La serialización soluciona esto al permitir 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á algún tipo de serialización.
Primero definamos la serialización, luego podemos hablar sobre por qué es tan útil.
La serialización simplemente convierte 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 las 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 la información que desea transmitir y luego serialice ese objeto a la otra máquina. No es el mejor método para la comunicación, pero hace el trabajo bien.
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 especializada de clonación (), simplemente serializando el objeto en una matriz de bytes, y luego deserializándolo en otra objeto logra este objetivo.
Almacenamiento en caché: realmente solo es una aplicación de lo anterior, pero a veces un objeto tarda 10 minutos en compilarse, pero solo tardaría 10 segundos en deserializarse. Por lo tanto, en lugar de mantener el objeto gigante en la memoria, simplemente almacénelo en un archivo mediante serialización y léelo 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.
Puedo compartir mi historia y espero que brinde algunas ideas sobre por qué la serialización es necesaria. Sin embargo, las respuestas a su pregunta ya son notablemente detalladas.
Tenía varios proyectos que necesitan cargar y leer un montón de archivos de texto. Los archivos contenían palabras de finalización, 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 ponerlos 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 crear un objeto para leer cada uno de estos archivos y completar arreglos 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.
Uso 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.
Serialización es el proceso de convertir un conjunto de instancias de objetos que contienen referencias entre sí en una secuencia lineal de bytes, que luego puede enviarse a través de un socket, almacenarse en un archivo o simplemente manipularse como una secuencia de datos.
Ver usos de Wiki :
La serialización tiene una serie de ventajas. Proporciona:
- un método de persistencia de objetos que es más conveniente que escribir sus propiedades en un archivo de texto en el disco, y volver a ensamblarlas leyendo esto nuevamente.
- un método para emitir llamadas a procedimientos remotos, por ejemplo, como en SOAP
- un método para distribuir objetos, especialmente en componentes de software como COM, CORBA, etc.
- un método para detectar cambios en datos variables en el tiempo.