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.
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.
fuente
Serializar / Deserializar es simplemente preparar y escribir / leer objetos en / desde el disco.
fuente
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.
fuente