Question

Existe-t-il de bonnes bibliothèques de sérialisation C ++ existantes prenant en charge la sérialisation partielle?

Par "sérialisation partielle" Je veux dire que je pourrais vouloir sauvegarder les valeurs de 3 membres spécifiques, et pouvoir ensuite appliquer cette copie sauvegardée à une instance différente. Je ne ferais que mettre à jour ces 3 membres et laisser les autres intacts.

Cela serait utile pour synchroniser des données sur un réseau. Supposons que j'ai un objet sur un client et un serveur, et lorsqu'un membre change sur le serveur, je souhaite envoyer au client un message contenant la valeur mise à jour pour ce membre et pour ce membre uniquement . Je ne veux pas envoyer une copie de l'objet entier sur le fil.

boost :: serialization se présente comme suit il ne supporte que tout ou rien.

Edit: 3 ans après l’écriture initiale de cet article, j’y repense et me dis, 'wut?' boost :: serialization vous permet de définir quels membres vous voulez enregistrer ou non, donc il prend en charge la 'sérialisation partielle' comme je semble l'avoir décrite. De plus, étant donné que C ++ manque de bibliothèques de sérialisation par réflexion, vous devez spécifier explicitement chaque membre que vous enregistrez, sauf s’il est fourni avec un outil externe permettant d’analyser les fichiers source ou avec un format de fichier d’entrée distinct utilisé pour générer du code C ++ (par exemple: ce que fait les tampons de protocole). Je pense que je dois avoir été confondu conceptuellement quand j'ai écrit ceci.

Était-ce utile?

La solution

Vous ne recherchez clairement pas la sérialisation ici.

La sérialisation consiste à enregistrer un objet, puis à le recréer à partir du flux d'octets. Pensez aux sauvegardes de jeux vidéo ou au contexte de session d’un serveur Web.

Ici, vous avez besoin d’une messagerie. Les les FlatBuffers de Google sont parfaits pour cela. Spécifiez un message qui contiendra chaque champ de manière facultative. Dès réception du message, mettez à jour votre objet avec les champs existants et laissez les autres intacts.

L’avantage des FlatBuffers est qu’ils gèrent bien la compatibilité ascendante et descendante, ainsi que les codages texte et binaire (le texte est excellent pour le débogage et le binaire est meilleur pour les performances pures), en plus d’une étape d’analyse à coût nul.

Et vous pouvez même décoder les messages avec une autre langue (python ou ruby, par exemple) si vous les enregistrez quelque part et souhaitez créer un gui html permettant de l'inspecter!

Autres conseils

Bien que je ne les connaisse pas, vous pouvez également consulter celles de Google. Tampons de protocole .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top