¿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 puede transmitirse a través de una red o almacenarse en un disco para ser reensamblado y utilizado 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 informáticos modernos tienen soporte nativo para la serialización o una biblioteca disponible para agregar esta funcionalidad. Cuando se serializa un objeto, todos los campos del objeto se aplanan. Este proceso también se conoce como desinflar o clasificación. 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 conector de red.

Una vez que los datos han sido serializados y enviados 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 una copia exacta Es importante comprender que solo se calculan los datos que contenía el objeto; el objeto, 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 del objeto se puede almacenar en medios físicos para que el estado exacto de cada objeto se pueda restaurar al punto en el que se encontraba cuando se detuvo la ejecución del programa. Se puede usar para enviar mensajes a otra computadora que hará que se ejecute un procedimiento remoto. La serialización incluso se puede usar para comparar de manera eficiente 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. La más importante es que, a través del proceso de conversión de un objeto en un flujo de bytes, se expondrán los campos que se declaran como privados. . Durante la transmisión del flujo, estos datos se pueden capturar y decodificar, presentando un agujero de seguridad. La mayoría de los lenguajes permiten la externalización de los formatos de serialización de datos, por lo que la codificación propietaria es posible para ayudar a mitigar este riesgo.

Otro factor a tener en cuenta es que la serialización, en general, funcionará solo 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 serán irrecuperables hasta que una instancia del objeto original sin modificar intente restaurarlo.