ci-dessous est quelque chose que j'ai lu et je me demandais si la déclaration est vraie. P>
sérialisation est le processus de convertir une structure de données ou un objet dans une séquence de bits afin qu'il puisse être stocké dans un tampon de fichier ou de mémoire, ou transmis sur un réseau Lien de connexion pour être "ressuscité" plus tard dans le même ou un autre ordinateur environnement. [1] Quand le résultat La série de bits est relecture selon le format de sérialisation, il peut être utilisé pour créer une sémantiquement clone identique de l'original objet. Pour de nombreux objets complexes, tels comme ceux qui font une utilisation intensive de Références, ce processus n'est pas simple. p> blockQuote>
11 Réponses :
La sérialisation est juste une manière fantaisie de décrire ce que vous faites lorsque vous souhaitez une structure de données de certaines données, une classe, etc.
Par exemple, disons avoir une structure: P>
struct Color
{
int R, G, B;
};
Pour quelque chose de plus complexe qu'une primitive ou une analyse homogène de primitives, oui. p>
Oui, la sérialisation est le seul moyen de transmettre des données sur le fil. Considérer quel est le but de la sérialisation. Vous définissez la façon dont la classe est stockée. En mémoire, vous n'avez aucun moyen de savoir exactement où chaque partie de la classe est. Surtout si vous avez, par exemple, une liste, si elle a été allouée tôt, puis réaffectée, il risque d'être fragmenté partout, il n'est donc pas un bloc de mémoire contigu. Comment envoyez-vous cette classe fragmentée sur la ligne? P>
Pour cette affaire, si vous envoyez une liste complextype code> commence et se termine. P>
La sérialisation d'une certaine sorte est nécessaire, mais cela peut prendre de nombreuses formes. Cela peut être quelque chose comme la sérialisation DotNet, qui est géré par la langue, ou peut être un format construit sur mesure. Peut-être une série d'octets où chaque octet représente une "valeur magique" que vous seul et votre application comprennent. P>
Par exemple, dans DotNet, je peux créer une classe avec une seule propriété à cordes, marquez-la comme sérialisable et la structure DotNet prend soin de la plupart des autres. P>
Je peux également construire mon propre format personnalisé lorsque les 4 premiers octets représentent la longueur des données envoyées et tous les octets suivants sont des caractères d'une chaîne. Mais bien sûr, vous devez vous soucier de commander des octets, unicode vs coding ANSI, etc., etc. P>
En règle générale, il est plus facile d'utiliser n'importe quel cadre que l'utilisation de votre langage / OS / Dev Framework utilise, mais ce n'est pas nécessaire. P>
La sérialisation binaire n'est pas la seule option. Vous pouvez également sérialiser un objet sous forme de fichier XML, par exemple. Ou comme un JSON. P>
Quels sont les avantages à utiliser XML sur binaire
pour aller sur un fil de réseau? Vous ne pouvez pas. Pour stocker dans un fichier? lisibilité.
L'avantage de XML est la disponibilité des bibliothèques capables d'analyser. En théorie, l'utilisation de XML permet au format de sérialisation d'être des plates-formes d'accrocher plus facilement. Il existe même des normes, comme du savon. La lisibilité peut être un plus, mais ... XML est verbeuse, donc souvent pas aussi lisible dans la pratique. Le désavantage de XML est sa verbosité et le volume de données générées, ce qui peut avoir un impact sur la performance.
Le vrai problème ici ne passe pas sur le fil, le problème se retrouve avec le même objet sémantique de l'autre côté du fil. Pour transporter correctement les données entre systèmes différents - que ce soit via la carte TCP / IP, la disquette ou la carte de poinçon - les données doivent être codées (sérialisées) dans une représentation indépendante de la plate-forme. P>
En raison des problèmes d'alignement et de type de type, si vous avez tenté de faire un transfert binaire droit de votre objet, cela entraînerait un comportement non défini (d'emprunter la définition des normes C / C ++). P>
Par exemple, la taille et l'alignement du Long DataType peut différer entre les architectures, les plates-formes, les langues et même différentes constructions du même compilateur. P>
Je pense que vous posez la mauvaise question. La sérialisation est un concept de programmation informatique et il existe certaines exigences qui doivent être satisfaites pour que quelque chose soit considéré comme un mécanisme de sérialisation. P>
tout moyen de préparation de données de manière à ce qu'il puisse être transmis ou stocké de manière à ce qu'un autre programme (y compris mais non limité à une autre instance du même programme sur un autre système ou à un autre moment) puisse lire les données et Instancez les objets que les données représentent. P>
Remarque J'ai glissé le terme "objets" là-bas. Si j'écris un programme qui stocke un tas de texte dans un fichier; et j'utilise plus tard un autre programme, ou une instance de ce premier programme pour lire ces données ... Je n'ai pas vraiment utilisé un mécanisme de "sérialisation". Si je l'écris de telle sorte que le texte soit également stocké avec un État sur la manière dont il était manipulé ... cela pourrait entraîner la sérialisation. P>
Le terme est utilisé principalement pour transmettre le concept que des combinaisons actifs de comportement et d'état sont rendu dans une forme qui peut être lue par un autre programme / instance et instanciée. La plupart des mécanismes de sérialisation sont liés à un langage de programmation particulier ou à un système de machine virtuelle (dans le sens d'une machine virtuelle Java, un C # vm, etc.; pas dans le sens des machines virtuelles "VMware"). JSON (et YAML) sont une exception notable à cela. Ils représentent des données pour lesquelles il existe des classes d'objet assez étroites avec une sémantique raisonnablement similaire, de sorte qu'elles puissent être instanciées dans plusieurs langages de programmation différentes de manière significative. P>
Ce n'est pas que toute la transmission de données ou le stockage implique une "sérialisation" ... est que certains moyens de stocker et de transmettre des données peuvent être utilisés pour la sérialisation. À très liste, il doit être possible de désagréger parmi les types de données que le langage de programmation prend en charge. Si elle se lit comme suit: 1 est dû savoir si le texte ou un entier ou un véritable (équivalent à 1,0) ou un peu. P>
Strictement parler, ce n'est pas l'option em>; Vous pouvez mettre un argument selon lequel "Remoting" rencontre la signification dans le texte; Ici, un faux objet est créé au récepteur contenant Cependant, "Remoting" est maintenant plutôt à la mode. Le plus souvent, oui: l'objet devra être sérialisé et désériorialisé d'une manière ou d'une autre (il y a lots em> d'options ici). Le paragraphe est alors très correct. P>
La sérialisation est un must afin de transférer des données sur le fil? p> blockQuote>
littéralement non. p>
Il est concevable que vous puissiez déplacer des données d'un espace d'adressage à un autre sans la sérialiser. Par exemple, un système hypothétique utilisant la mémoire virtuelle distribuée pourrait déplacer des données / des objets d'une machine à une autre en envoyant des pages ... sans une étape de sérialisation spécifique. P>
et dans une machine, les objets pourraient être transférés par des pages de commutation d'un espace d'adresses virtuel à une autre. P>
Mais dans la pratique, la réponse est oui. Je ne suis au courant d'aucune technologie traditionnelle qui fonctionne de cette façon. P>
Cela dépend de ce que vous entendez par «le fil». La citation signifie probablement des éléments qui sont intrinsèquement séquences d'octets (fichiers, mémoire sous un modèle de mémoire simpliste, connexions réseau sous les API habituelles), donc par définition, les données transférées par ces méthodes sont sérialisées. La question indique "le fil" - si mon fil est un fil physique, je pourrais nouer une cuillère avec une corde et glisser à l'autre extrémité. Cela ne veut pas dire que j'ai sérialisé la cuillère ;-) Tout protocole de transport radical enverrait quelque chose d'autre que les octets. Peut-être pas des cuillères.
@Steve Jessop - Cela dépend avec précision comment vous interprétez la phrase "un processus de conversion d'une structure de données ou d'un objet en une séquence de bits" i>. Je dirais que dans un schéma basé sur une page cela ne se produit pas. Il n'y a clairement aucune conversion de structures de données i> ou objets i>, et même aux données de niveau de page est copiée plutôt que d'être convertie d'une représentation distincte à une autre.
Oui, mais je me demande ce que cela signifierait d'envoyer une page de données "à travers le fil". Si "à travers le fil" signifie à travers une liaison UART ou une connexion TCP / IP ou quoi que ce soit du genre, alors vous vous avez coupé vous i> à un certain niveau représente cette page comme des octets, même si vous avez aussi Un niveau d'abstraction plus élevé auquel vous pouvez parler de la page "juste en mouvement". Si vous échangez à chaud une sorte de mémoire physique sur une machine et dans une autre, alors sûre, il n'est jamais sérialisé. C'est très parallélédiisé ;-)
Avoir des messages comme objets et sérialisation dans les octets est un meilleur moyen de comprendre et de gérer ce qui est transmis sur le fil. Dans les vieux jours, les protocoles et les données étaient beaucoup plus simples, souvent, les programmeurs ont simplement des octets dans le flux de sortie. Une compréhension commune a été partagée en ayant des spécifications bien connues et simples. P>
Je dirais que la sérialisation est nécessaire pour stocker les objets dans le fichier pour la persistance, mais les pointeurs alloués de manière dynamique des objets doivent être reconstruisant à nouveau lorsque nous désagréalisons, mais la sérialisation du transfert dépend du protocole physique et du mécanisme utilisé, Par exemple, si j'utilise UART pour transférer des données, son bit sérialisé par un peu, mais si j'utilise un port parallèle, 8 bits ensemble sont transférés, ce qui n'est pas sérialisé p>
Les bits sont à peu près la seule option que si vous utilisez des pigeons porteurs
ok donc cette déclaration est vraie?
@Mitchwhate +1 pour FAQS.ORG/RFCS/RFC1149.HTML ... Don 't oublie la capacité de transport d'une gare wagon;)
Je m'excuse si la question ressemble et sonne stupide mais de la lecture que je fais ressemble à son indispensable. Je voulais juste qu'une personne plus compétente de valider ce que je lis.
@ Randywhite30 Voir les 5 réponses que vous avez déjà et posez un ou plusieurs d'entre nous pour plus de précisions
@ Randywhite30 - c'est faux, ou au moins une simplification excessive ... en théorie; voir ma réponse.
Avez-vous déjà reçu cela résolu avec succès? Avez-vous toujours besoin d'aide avec cela?