Qu'est-ce que la sérialisation?

8

Je pratique la programmation depuis un certain temps comme passe-temps, mais je n'ai commencé à voir ce concept que récemment. J'ai recherché sur Google «qu'est-ce que la sérialisation» de nombreuses fois, mais je n'ai jamais obtenu de définition, généralement juste des exemples de comment le faire. Je le vois sur les forums Ogre, les forums Bullet et tous les autres forums auxquels je vais, donc je pense qu'il est temps que je comprenne ce que c'est et pourquoi l'utiliser.

Éditer

Pour clarifier, je cherche plus pourquoi l'utiliser, surtout dans le sens de la programmation de jeux. Par exemple, l'API Bullet Physics parle beaucoup de sérialisation d'un maillage, donc je veux comprendre pourquoi.

Merci :)

Aidan Knight
la source

Réponses:

7

De la documentation boost.serialization : Ici, nous utilisons le terme "sérialisation" pour désigner la déconstruction réversible d'un ensemble arbitraire de structures de données C ++ en une séquence d'octets. Un tel système peut être utilisé pour reconstituer une structure équivalente dans un autre contexte de programme. Selon le contexte, cela peut être utilisé pour implémenter la persistance des objets, le passage de paramètres à distance ou une autre fonctionnalité. Dans ce système, nous utilisons le terme «archive» pour faire référence à un rendu spécifique de ce flux d'octets. Il peut s'agir d'un fichier de données binaires, de données texte, XML ou autre créé par l'utilisateur de cette bibliothèque.

En d'autres termes, la sérialisation est tout processus qui transforme des objets en mémoire en une sorte de flux secondaire et la désérialisation fait l'inverse, en prenant un flux secondaire et en le transformant en objets en mémoire.

Le terme "sérialisation" n'implique rien sur le format du bytestream. Il peut s'agir d'un format binaire efficacement compressé ou d'une description XML ou YAML lâche. Il peut même s'agir de code source dans le langage d'origine lui-même, ou dans un autre langage de programmation, tel que JSON , qui est un sous-ensemble de JavaScript. Le format exact du flux sérialisé doit être choisi en fonction de la façon dont vous comptez l'utiliser.

La sérialisation est une fonction intégrée de nombreux langages et environnements - par exemple Java et Python . Dans les langages de niveau inférieur comme C et C ++, il faut utiliser (ou écrire) des bibliothèques de sérialisation , car le mécanisme fourni par le langage n'est généralement pas assez bon - il ne peut pas suivre ou sérialiser des pointeurs et des références, et est sujet à des problèmes d'endianité, pour exemple.

Wikipedia a un article décent sur la sérialisation.

La sérialisation est largement utilisée dans les jeux (et tous les logiciels) à de nombreuses fins:

  • Chargement de la liste de tous les sorts du jeu à partir des fichiers de ressources.
  • Sauvegarde et chargement du jeu.
  • Enregistrement de l'état des choses (par exemple, positions des joueurs et inventaires) dans une base de données SQL ou objet.
  • Appel d'appels de fonction à distance sur un réseau ou une autre liaison IPC.
Communauté
la source
6

Si je comprends bien, la sérialisation est simplement le concept de prendre un objet ou un ensemble d'objets, de les transformer en un flux d'octets (pour le stockage de données ou la transmission réseau, etc.), puis de reconstruire plus tard l'objet d'origine à partir de ce flux secondaire (" désérialisation ").

Lunatique: C'est un peu comme un téléporteur de Star Trek, maintenant j'y pense.

Il existe un certain nombre de bibliothèques pour cela, chacune traitant des petits problèmes qui ont tendance à se mettre en travers (comme l'endianisme bytestream et autres).

Kaz Dragon
la source
Cela a du sens, et j'aime vraiment l'analogie du téléporteur, qui aide certainement à comprendre cela lol. Utiliser la sérialisation pour la mise en réseau est parfaitement logique pour moi, mais l'utiliser ailleurs, comme le moteur Bullet Physics et le format .bullet, je ne comprends pas où il est utilisé.
Aidan Knight
Pour clarifier davantage ma confusion, j'ai trouvé ce didacticiel simple codeproject.com/KB/cpp/serialization_primer1.aspx et à l'étape 3, il montre la sérialisation des données dans un fichier. Je ne comprends pas en quoi c'est différent de simplement écrire du texte dans un fichier en utilisant fopen / fwrite, etc.
Aidan Knight
La sérialisation est le processus de transformation des objets de votre logiciel en texte que vous pouvez transmettre à fwrite (ou à tout autre lecteur / écrivain orienté bytestream dont vous avez besoin).
3

Sérialiser quelque chose signifie essentiellement le transformer en série. Cela est nécessaire si vous souhaitez envoyer quelque chose sur un réseau ou l'écrire dans un fichier, car les deux attendent une série d'octets. C'est donc généralement un terme de fantaisie pour les systèmes de sauvegarde et de chargement. Dans le cas de Bullet, il s'agit simplement de prendre les données de maillage et de les enregistrer sous une forme que Bullet peut utiliser efficacement. Vous pouvez l'enregistrer et le charger plus tard sans avoir besoin de ré-analyser vos maillages.

Kylotan
la source
0

La sérialisation / désérialisation consiste simplement à préparer et à écrire / lire des objets sur / depuis le disque.

WernerCD
la source
-3

J'utilise personnellement la sérialisation pour la mise en réseau. En dehors de cela, je ne l'utilise pas vraiment. Si vous voulez savoir pourquoi il est utilisé dans Bullet, la meilleure chance d'avoir une réponse est de demander dans les forums Bullet ou de lire la documentation.

Périphérique inconnu
la source