serialisation d'un objet

serialisation d'un objet - C++ - Programmation

Marsh Posté le 03-05-2011 à 10:36:09    

bonjour,
 
J'aimerais connaitre l'intérêt de sérialiser un objet. Pourquoi ne peut on juste pas écrire l'objet tel quel sur une socket ? Par exemple :
 

Code :
  1. socket.write( (char*)(&monObjet), sizeof(monObjet) );


 
et ensuite relire de l'autre côté, et faire un cast pour récupérer l'objet.  
 
Pourquoi devoir sérialiser ?
 
merci par avance

Reply

Marsh Posté le 03-05-2011 à 10:36:09   

Reply

Marsh Posté le 03-05-2011 à 11:11:52    

Pour une question de portabilité, déjà : si la machine émettrice et la machine réceptrice ne fonctionnent pas selon le même endianness, tu risques d'avoir des surprises.
Gérer la sérialisation / désérialisation d'un objet permet de traiter cet aspect.
 
Suppose aussi que ton objet comporte un membre de type pointeur... Ça fera une belle jambe à la machine réceptrice de savoir qu'une partie du contenu de l'objet est à l'adresse X sur la machine émettrice !

Reply

Marsh Posté le 03-05-2011 à 16:30:14    

hello,
 
Merci pour ta réponse! En supposant qu'il n'y ait pas de pointeur et qu'on sache l'endianess, ça ne poserait donc pas de problème alors ?
 
Par exemple passer une structure avec juste des tableaux de char et des entiers, etc.

Reply

Marsh Posté le 03-05-2011 à 17:03:01    

Pourquoi faire bien quand on peut faire buggé, c'est ça?
Prends les bonnes habitudes, écris du code qui marchera quelles que soient les circonstances.
Les trucs mal écrits, parce que ça pose pas de problème, ça finit toujours par en poser, loi de Murphy rulez.
A+,

Message cité 1 fois
Message édité par gilou le 03-05-2011 à 17:03:21

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-05-2011 à 17:07:02    

+1
Je ne garantis pas d'avoir listé tous les problèmes. En particulier, je n'ai pas parlé de l'alignement en mémoire, mais je pense que c'est aussi un souci potentiel.
 
Sérialiser/désérialiser un objet, cela revient à convenir d'un format d'échange de cet objet. Après, que tu l'écrives dans un fichier ou que tu l'envoies sur le réseau, c'est une autre affaire.
Cela t'assures en tout cas de pouvoir récupérer de manière sûre ton objet à l'arrivée. Passer du temps à la conception de ce format d'échange n'est pas du temps perdu.

Reply

Marsh Posté le 03-05-2011 à 17:15:54    

cf Boost.Serialization qui gere ca deja de tete

Reply

Marsh Posté le 03-05-2011 à 17:43:03    

gilou a écrit :

Pourquoi faire bien quand on peut faire buggé, c'est ça?


 
en fait, c'est quelque chose que j'ai lu dans du code existant donc j'imagine que sous certaines conditions ça doit pouvoir se faire
 
merci pour vos réponses en tout cas!

Reply

Marsh Posté le 04-05-2011 à 00:14:59    

J'aime bien utiliser protocol buffers pour ce genre de problèmes -> http://code.google.com/intl/fr-FR/ [...] olbuffers/  
Tu définis ton protocole d'abord, et ensuite tu récupères son implémentation en C++ (ou java, etc.)


---------------
iteme.free.fr | Mon feedback
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed