2010-01-31 32 views
27

He visto el término "serializado" en todas partes, pero nunca lo he explicado. Por favor explica lo que eso significa.¿Qué es un objeto "serializado" en la programación?

+1

Si alguien pudiera dar un ejemplo detallado, sería genial. Cuando busco este tema, también estoy confundido. Los ejemplos se extienden hasta 'pickle.dump (object, file)' y 'pickle.load (file)' (usando Python, por ejemplo), lo que honestamente es totalmente inútil para ayudar a uno a entender. –

Respuesta

37

La serialización generalmente se refiere al proceso de conversión de un tipo de datos abstracto a una secuencia de bytes (a veces se serializa en texto, XML o CSV u otros formatos. Lo importante es que es un formato simple que se puede leer/escrito sin entender los objetos abstractos que representan los datos). Al guardar datos en un archivo, o transmitir a través de una red, no puede simplemente almacenar un objeto MyClass, solo puede almacenar bytes. Por lo tanto, debe tomar todos los datos necesarios para reconstruir su objeto y convertirlo en una secuencia de bytes que se pueden escribir en el dispositivo de destino y, posteriormente, leer y deserializar, reconstruyendo su objeto.

+3

¿un tipo de datos abstracto? más como un concreto .... –

+11

Los objetos de clase son tipos de datos abstractos. Resumen como en "no es un tipo de datos primitivo, sino algo que representa un concepto abstracto". Una clase 'Car' es un tipo de datos abstracto. Representa algo abstracto en el programa. No hay autos adentro. Solo datos que proporcionan la abstracción de uno. Y esa abstracción debe ser demolida para serializarla. No puede almacenar un automóvil en un archivo, pero puede almacenar los datos necesarios para reconstruir la instancia de la clase 'Car'. – jalf

+6

No, yo no soy. No estoy hablando de una clase abstracta, que estoy de acuerdo es algo completamente diferente. Un tipo de datos abstracto es más o menos un término más general para una clase (excepto que cubre muy bien los equivalentes en idiomas sin clases). Una clase es una abstracción, y es un tipo de datos. Llamarlo un tipo de datos abstracto no es una idea que se me ocurrió. :) – jalf

10

Serialización es el proceso de tomar una instancia de objeto y convertirla a un formato en el que se puede transportar a través de una red o persistir en el almacenamiento (como un archivo o base de datos). El formato serializado contiene la información de estado del objeto.

La deserialización es el proceso de utilizar el estado serializado para reconstruir el objeto del estado serializado a su estado original.

5

explicación real simple, serialización es el acto de tomar algo que está en la memoria como una instancia de una clase (objeto) y transformarlo en una estructura adecuada para el transporte o el almacenamiento.

Un ejemplo común es la serialización XML para usar en servicios web. Tengo una instancia de una clase en el servidor y necesito enviarla a través de la web, primero la serializo en xml, lo que significa crear una versión xml de esos datos en la clase, una vez en xml puedo usar un medio de transporte como HTTP para enviarlo fácilmente.

Existen varias formas de serialización como XML o JSON.

4

Existen (al menos) dos significados completamente diferentes a la serialización. Uno está convirtiendo una estructura de datos en memoria en una secuencia de bits, por lo que puede escribirse en el disco y reconstituirse posteriormente, o transmitirse a través de una conexión de red y usarse en otra máquina, etc.

El otro significado está relacionado con serial vs Ejecución paralela: es decir, garantizar que solo un hilo de ejecución haga algo a la vez. Por ejemplo, si va a leer, modificar y escribir una variable, debe asegurarse de que un hilo complete una secuencia de lectura, modificación y escritura antes de que otro pueda iniciarla.

+0

Estoy contento alguien mencionó el otro significado de 'serialización' - Recuerdo haber estado confundido la primera vez que encontré el "escupir un objeto en un archivo", lo que significa que lo había usado para significar "secciones críticas" durante mucho tiempo antes de eso . –

+0

Creo que te refieres a Secuencial en lugar de serializado ... –

+0

No - "serializado" también se puede usar para indicar "serializar * acceso * a datos o código". "Marshalling" es el término que utilicé para obtener los datos de un objeto a/desde un archivo (u otra secuencia) antes de que el término "serialización" fuera utilizado para eso en el contexto de Java/.NET (al menos para mí). –

2

Lo que dijeron. La palabra "serial" se refiere al hecho de que los bytes de datos deben ponerse en un orden estandarizado para ser escritos en un dispositivo de almacenamiento en serie, como un flujo de salida de archivo o un bus serie. En la práctica, los bytes brutos rara vez son suficientes. Por ejemplo, una dirección de memoria del programa que serializa la estructura de datos puede no ser válida en el programa que reconstruye el objeto a partir de los datos almacenados. Entonces se requiere un protocolo. Ha habido muchos, muchos estándares e implementaciones a lo largo de los años. Recuerdo uno de mediados de los 80 llamado XDR, pero no fue el primero.

0
  • tiene datos en un formato determinado (por ejemplo, lista, mapas, objetos, etc.)
  • usted quiere transportar que los datos (por ejemplo, a través de una llamada a la API o función)
  • el medio de transporte solamente admite ciertos tipos de datos (por ejemplo, JSON, XML, etc.)
  • Serialización: Convierta sus datos existentes a un tipo de datos compatible para que pueda ser transportado.

La clave es que usted necesita transportar datos y los medios por los cuales el transporte solo permite ciertos formatos. Su formato de datos actual no está permitido, por lo que debe "serializarlo". Por lo tanto, como Mitch respondió:

Serialización es el proceso de tomar una instancia de objeto y convertirla a un formato en el que se puede transportar.

Cuestiones relacionadas