¿Qué es la serialización?

8

He estado en la programación por un tiempo como hobby, pero no comencé a ver este concepto hasta hace poco. Tengo google'd "¿Qué es la serialización" en numerosas ocasiones, pero en realidad nunca obtengo ningún tipo de definición, por lo general, solo ejemplos de cómo hacerlo. Lo estoy viendo en los foros de Ogre, los foros de Bullet y en todos los demás foros a los que voy, por lo que creo que ya es hora de que realmente entienda qué es y por qué usarlo.

Editar

Para aclarar, estoy buscando más por qué usarlo, especialmente en el sentido de la programación de juegos. Por ejemplo, la API Bullet Physics habla mucho sobre la serialización de una malla, por lo que quiero entender por qué es así.

Gracias :)

Aidan Knight
fuente

Respuestas:

7

De la documentación de boost.serialization : Aquí, usamos el término "serialización" para referirnos a la deconstrucción reversible de un conjunto arbitrario de estructuras de datos de C ++ en una secuencia de bytes. Tal sistema puede usarse para reconstituir una estructura equivalente en otro contexto de programa. Dependiendo del contexto, esto podría usarse para implementar la persistencia de objetos, el paso remoto de parámetros u otra facilidad. En este sistema usamos el término "archivo" para referirnos a una representación específica de este flujo de bytes. Esto podría ser un archivo de datos binarios, datos de texto, XML o algún otro creado por el usuario de esta biblioteca.

En otras palabras, la serialización es cualquier proceso que transforma objetos en la memoria en algún tipo de bytestream, y la deserialización hace lo contrario, toma un bytestream y lo transforma de nuevo en objetos en la memoria.

El término "serialización" no implica nada sobre el formato de bytestream. Puede ser un formato binario empaquetado eficientemente, o una descripción XML o YAML suelta. Incluso puede ser el código fuente en el lenguaje original, o en otro lenguaje de programación, como JSON , que es un subconjunto de JavaScript. El formato exacto de la secuencia serializada debe elegirse en función de cómo pretende utilizarlo.

La serialización es una característica incorporada de muchos lenguajes y entornos, por ejemplo, Java y Python . En lenguajes de nivel inferior como C y C ++, uno debe usar (o escribir) bibliotecas de serialización , ya que el mecanismo proporcionado por el lenguaje generalmente no es lo suficientemente bueno: no puede seguir o serializar punteros y referencias, y está sujeto a problemas de endianness, por ejemplo.

Wikipedia tiene un artículo decente sobre serialización.

La serialización se usa ampliamente en los juegos (y en todo el software) para muchos propósitos:

  • Cargando la lista de todos los hechizos en el juego desde archivos de recursos.
  • Guardando y cargando el juego.
  • Grabar el estado de las cosas (por ejemplo, posiciones e inventarios de jugadores) en una base de datos SQL o de objetos.
  • Invocar llamadas a funciones remotas a través de una red u otro enlace IPC.
Comunidad
fuente
6

Según tengo entendido, la serialización es solo el concepto de tomar un objeto o un conjunto de objetos, transformarlos en un flujo de bytes (para almacenamiento de datos o transmisión de red, etc.) y luego reconstruir el objeto original a partir de ese bytestream (" deserialización ").

Caprichoso: es un poco como un teletransportador de Star Trek, ahora lo pienso.

Existen varias bibliotecas para esto, cada una de las cuales trata con las pequeñas molestias que tienden a interponerse en el camino (como bytestream endianness y tal).

Kaz Dragon
fuente
Esto tiene sentido, y realmente me gusta la analogía del teletransportador, que definitivamente ayuda a comprenderlo jajaja. Usar la serialización para redes tiene mucho sentido para mí, pero usarlo en otros lugares, como el motor Bullet Physics y el formato .bullet, no entiendo dónde se usa allí.
Aidan Knight el
Para aclarar aún más mi confusión, encontré este tutorial simple codeproject.com/KB/cpp/serialization_primer1.aspx y en el Paso 3, muestra la serialización de datos a un archivo. No entiendo cómo eso es diferente de simplemente escribir texto en un archivo usando fopen / fwrite, etc.
Aidan Knight
La serialización es el proceso de convertir objetos en su software en texto que puede pasar a fwrite (o cualquier otro lector / escritor orientado a la corriente que necesite).
3

Serializar algo esencialmente significa cambiarlo en una serie. Esto es necesario si desea enviar algo a través de una red o escribirlo en un archivo, porque ambos esperan una serie de bytes. Por lo tanto, generalmente es un término elegante para los sistemas de guardar y cargar. En el caso de Bullet, es simplemente tomar los datos de malla y guardarlos en una forma que Bullet pueda usar efectivamente. Puede guardar esto y cargarlo más tarde sin necesidad de volver a analizar sus mallas.

Kylotan
fuente
0

Serializar / Deserializar es simplemente preparar y escribir / leer objetos en / desde el disco.

WernerCD
fuente
-3

Yo personalmente uso la serialización para redes. Fuera de eso, realmente no le tengo mucho uso. Si desea saber por qué se usa en Bullet, la mejor oportunidad que tiene de obtener una respuesta es preguntar en los foros de Bullet o leer la documentación.

Dispositivo desconocido
fuente