¿Qué es la serialización?
En la programación de computadoras, la serialización es el proceso de tomar una estructura de datos almacenada en la memoria local y convertirla en un flujo de bytes que pueden transmitirse a través de una red o almacenarse en un disco para ser ensamblados y utilizados por otro programa. La serialización también se puede utilizar para guardar el estado de un objeto para que el mismo programa pueda volver a cargarlo más tarde. Un uso más complejo de esta función es invocar una llamada a procedimiento remoto (RPC) , ejecutando efectivamente un procedimiento en otra computadora a través de una red. Este mecanismo también permite la distribución de objetos de datos a través de un gran sistema en red.
Casi todos los lenguajes de computadora modernos tienen soporte nativo para la serialización o una biblioteca disponible para agregar esta funcionalidad. Cuando un objeto se serializa, todos los campos del objeto se aplanan. Este proceso también se conoce como desinflado o cálculo de referencias. Los datos se convierten en una fila unidimensional de bytes que se pueden escribir en cualquier flujo de salida. El tipo de flujo de salida no importa y podría ser un archivo o un socket de red.
Una vez que los datos se han serializado y enviado a su ubicación final, comienza el proceso de deserialización. El programa que lee el flujo de bytes restaura toda la información y la coloca en una nueva instancia del objeto original, creando un copia exacta. Es importante comprender que solo los datos que el objeto contenía se ordenan; el objeto y sus métodos y otros datos de implementación no lo son, lo que significa que el programa que deserializa los datos debe poder crear una instancia de la clase que se serializó originalmente.
La serialización de la estructura de datos se puede usar para una variedad de propósitos: la información de los objetos se puede almacenar en medios físicos para que el estado exacto de cada objeto se pueda restaurar al punto en que estaba cuando se detuvo la ejecución del programa. envía mensajes a otra computadora que hará que se ejecute un procedimiento remoto. La serialización puede incluso usarse para comparar eficientemente los cambios de estado en aplicaciones en tiempo real.
Antes de usar la serialización de objetos, es importante comprender algunas de las limitaciones que impone. Lo más importante es que, a través del proceso de convertir un objeto en una secuencia de bytes, los campos que se declaran como privados serán expuestos . Durante la transmisión del flujo, estos datos pueden capturarse y decodificarse, presentando un agujero de seguridad. La mayoría de los idiomas permiten la externalización de los formatos de serialización de datos para que sea posible la codificación patentada. Ayuda a mitigar este riesgo.
Otro factor a tener en cuenta es que, en general, la serialización solo funcionará con objetos que sean exactamente iguales al objeto serializado. Si se agregan nuevos campos o métodos a un objeto , entonces la firma del objeto cambiará. Esto significará que el objeto almacenado causará una excepción y los datos se volverán irrecuperables hasta que una instancia del objeto original no modificado intente restaurarlo.