Publicación por entregas


En informática, serialización (ortografía de EE. UU.) o serialización (ortografía de Reino Unido) es el proceso de traducir una estructura de datos o el estado de un objeto a un formato que se puede almacenar (por ejemplo, en un archivo o en un búfer de datos de memoria ) o transmitir (por ejemplo, a través de una red informática ) y reconstruido más tarde (posiblemente en un entorno informático diferente). [1] Cuando la serie de bits resultante se vuelve a leer de acuerdo con el formato de serialización, se puede usar para crear un clon semánticamente idéntico del objeto original. Para muchos objetos complejos, como aquellos que hacen un uso extensivo de referencias, este proceso no es sencillo. La serialización de objetos orientados a objetos no incluye ninguno de sus métodos asociados con los que estaban vinculados previamente.

Este proceso de serialización de un objeto también se denomina clasificación de un objeto en algunas situaciones. [2] [3] [4] La operación opuesta, extraer una estructura de datos de una serie de bytes, es la deserialización , (también llamada unserialization o unmarshalling ).

Para que algunas de estas características sean útiles, se debe mantener la independencia de la arquitectura. Por ejemplo, para un uso máximo de la distribución, una computadora que se ejecuta en una arquitectura de hardware diferente debería poder reconstruir de manera confiable un flujo de datos serializados, independientemente de su endian . Esto significa que el procedimiento más simple y rápido de copiar directamente el diseño de memoria de la estructura de datos no puede funcionar de manera confiable para todas las arquitecturas. Serializar la estructura de datos en un formato independiente de la arquitectura significa prevenir los problemas de ordenación de bytes , diseño de memoria o simplemente diferentes formas de representar estructuras de datos en diferentes lenguajes de programación .

Inherente a cualquier esquema de serialización es que, debido a que la codificación de los datos es por definición serial, extraer una parte de la estructura de datos serializados requiere que todo el objeto se lea de principio a fin y se reconstruya. En muchas aplicaciones, esta linealidad es una ventaja, ya que permite utilizar interfaces de E/S simples y comunes para mantener y transmitir el estado de un objeto. En aplicaciones donde un mayor rendimiento es un problema, puede tener sentido dedicar más esfuerzo a lidiar con una organización de almacenamiento no lineal más compleja.

Incluso en una sola máquina, los objetos de puntero primitivos son demasiado frágiles para guardarlos porque los objetos a los que apuntan pueden volver a cargarse en una ubicación diferente en la memoria. Para lidiar con esto, el proceso de serialización incluye un paso llamado desconexión o desconexión de punteros , en el que las referencias de punteros directos se convierten en referencias basadas en el nombre o la posición. El proceso de deserialización incluye un paso inverso llamado puntero swizzling .

Dado que tanto la serialización como la deserialización se pueden realizar desde un código común (por ejemplo, la función Serialize en Microsoft Foundation Classes ), es posible que el código común haga ambas cosas al mismo tiempo y, por lo tanto, 1) detecte diferencias entre los objetos que se están serializados y sus copias anteriores, y 2) proporcionar la entrada para la siguiente detección. No es necesario construir la copia anterior porque las diferencias se pueden detectar sobre la marcha, una técnica llamada ejecución diferencial. Esto es útil en la programación de interfaces de usuario cuyos contenidos varían con el tiempo: se pueden crear, eliminar, modificar o hacer que los objetos gráficos manejen eventos de entrada sin tener que escribir necesariamente un código separado para hacer esas cosas.