Además de lo que han dicho las otras respuestas:
A veces quieres serializar cosas que no son datos puros.
Por ejemplo, piense en un identificador de archivo o una conexión a un servidor. Aunque el identificador de archivo o el socket es un int
, este número no tiene sentido la próxima vez que se ejecute el programa. Para recrear correctamente los objetos que contienen identificadores para tales cosas, debe volver a abrir archivos y volver a crear conexiones, y decidir qué hacer si esto falla.
Actualmente, muchos idiomas admiten el almacenamiento de funciones anónimas dentro de objetos, por ejemplo, un onBlah()
controlador en Javascript. Esto es desafiante porque dicho código puede contener referencias a datos adicionales que a su vez necesitan ser serializados. (Y luego está el problema de serializar código de una manera multiplataforma, que obviamente es más fácil para los idiomas interpretados). Aún así, incluso si solo se puede admitir un subconjunto del idioma, aún puede resultar bastante útil. No muchos mecanismos de serialización intentan serializar el código, pero consulte serialize-javascript .
En los casos en que desea serializar un objeto pero contiene algo que no es compatible con su mecanismo de serialización, debe volver a escribir el código de una manera que funcione alrededor de esto. Por ejemplo, puede usar enumeraciones en lugar de funciones anónimas cuando hay un número finito de funciones posibles.
A menudo, desea que los datos serializados sean concisos.
Si envía datos a través de la red o incluso los almacena en el disco, puede ser importante mantener el tamaño pequeño. Una de las formas más fáciles de lograr esto es desechar la información que se puede reconstruir (por ejemplo, descartar cachés, tablas hash y representaciones alternativas de los mismos datos).
Por supuesto, el programador debe seleccionar manualmente lo que se va a guardar y lo que se debe descartar, y asegurarse de que las cosas se reconstruyan cuando se recrea el objeto.
Piensa en el acto de guardar un juego. Los objetos pueden contener muchos punteros a datos gráficos, datos de sonido y otros objetos. Pero la mayoría de estas cosas se pueden cargar desde los archivos de datos del juego y no es necesario almacenarlas en un archivo guardado. Descartarlo puede ser laborioso, por lo que a menudo se dejan pequeñas cosas. He editado hexadecimalmente algunos archivos guardados en mi tiempo y descubrí datos que eran claramente redundantes, como descripciones textuales de elementos.
A veces el espacio no es importante, pero la legibilidad sí lo es, en cuyo caso puede usar un formato ASCII (posiblemente JSON o XML).