En plus de ce que les autres réponses ont dit:
Parfois, vous souhaitez sérialiser des éléments qui ne sont pas des données pures.
Par exemple, pensez à un descripteur de fichier ou à une connexion à un serveur. Même si le descripteur de fichier ou le socket est un int
, ce nombre n'a pas de sens lors de la prochaine exécution du programme. Pour recréer correctement les objets contenant des descripteurs, vous devez rouvrir les fichiers, recréer les connexions et décider quoi faire en cas d'échec.
De nos jours, de nombreuses langues permettent de stocker des fonctions anonymes dans des objets, par exemple un onBlah()
gestionnaire en Javascript. Cela est difficile car un tel code peut contenir des références à des éléments de données supplémentaires qui doivent à leur tour être sérialisés. (Et puis il y a le problème de la sérialisation du code sur plusieurs plates-formes, ce qui est évidemment plus facile pour les langages interprétés.) Néanmoins, même si seul un sous-ensemble du langage peut être supporté, cela peut encore s'avérer très utile. Peu de mécanismes de sérialisation tentent de sérialiser le code, mais voir -vous à serialize-javascript .
Dans les cas où vous souhaitez sérialiser un objet mais qu'il contient quelque chose qui n'est pas pris en charge par votre mécanisme de sérialisation, vous devez réécrire le code de manière à contourner le problème. Par exemple, vous pouvez utiliser des énumérations à la place de fonctions anonymes lorsqu'il existe un nombre fini de fonctions possibles.
Souvent, vous souhaitez que les données sérialisées soient concises.
Si vous envoyez des données sur le réseau ou même les stockez sur un disque, il peut être important de conserver une taille réduite. L'un des moyens les plus simples d'y parvenir consiste à supprimer les informations pouvant être reconstruites (par exemple, en supprimant les caches, les tables de hachage et les représentations alternatives des mêmes données).
Bien sûr, le programmeur doit sélectionner manuellement ce qui doit être enregistré et ce qui doit être supprimé, et s’assurer que tout est reconstruit lors de la recréation de l’objet.
Pensez à l'acte de sauver une partie. Les objets peuvent contenir de nombreux pointeurs vers des données graphiques, des données audio et d'autres objets. Mais la plupart de ces éléments peuvent être chargés à partir des fichiers de données de jeu et n'ont pas besoin d'être stockés dans un fichier de sauvegarde. Le rejeter peut être laborieux et il reste souvent peu de choses. J'ai jeté des disques sur certains fichiers de sauvegarde à mon époque et découvert des données clairement redondantes, comme des descriptions d'éléments textuels.
Parfois, l’espace n’est pas important, mais la lisibilité l’est. Dans ce cas, vous pouvez utiliser plutôt un format ASCII (éventuellement JSON ou XML).