Sérialisation
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

En informatique, la sérialisation (de l'anglais américain serialization, le terme marshalling est souvent employé de façon synonyme) est un processus visant à encoder l'état d'une information qui est en mémoire sous la forme d'une suite d'informations plus petites (dites atomiques, voir l'étymologie de atome (Un atome (grec ancien ἄτομος [atomos], « que l'on ne peut diviser ») est la plus petite partie d'un corps simple pouvant se combiner chimiquement avec...)) le plus souvent des octets voire des bits. Cette suite pourra par exemple être utilisée pour la sauvegarde (En informatique, la sauvegarde (backup en anglais) est l'opération qui consiste à dupliquer et à mettre en sécurité les...) (persistance) ou le transport (Le transport est le fait de porter quelque chose, ou quelqu'un, d'un lieu à un autre, le plus souvent en utilisant des véhicules et des voies de...) sur le réseau (Un réseau informatique est un ensemble d'équipements reliés entre eux pour échanger des informations. Par analogie avec un filet (un réseau est un « petit...) (proxy, RPC…). L'activité (Le terme d'activité peut désigner une profession.) symétrique, visant à décoder cette suite pour créer une copie conforme de l'information d'origine, s'appelle la désérialisation (ou unmarshalling).

Les termes marshalling et unmarshalling s'emploient le plus souvent dans le contexte (Le contexte d'un évènement inclut les circonstances et conditions qui l'entourent; le contexte d'un mot, d'une phrase ou d'un texte inclut les mots qui l'entourent. Le concept de contexte issu traditionnellement de l'analyse...) d'échanges entre programmes informatiques, alors que les termes sérialisation et désérialisation sont plus généraux.

D'apparence simple, ces opérations posent en réalité un certain nombre (La notion de nombre en linguistique est traitée à l’article « Nombre grammatical ».) de problèmes, comme par exemple la gestion des références entres objets ou la portabilité (Selon le contexte, le mot portabilité peut avoir plusieurs significations :) des encodages. Par ailleurs les choix entre les diverses techniques de sérialisation ont une influence sur les critères de performances comme la taille des suite d'octets sérialisées ou la vitesse (On distingue :) de leur traitement.

Contexte

Comme pour beaucoup de choix algorithmiques, plus le mécanisme de sérialisation est spécialisé pour un type de donnée (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.) spécifique, plus il sera performant. Par exemple, si on ne veut transmettre que dix nombres dont les valeurs sont comprises entre 0 et 255, il suffira de 10 octets. Si par contre on ne sait pas à l'avance la quantité (La quantité est un terme générique de la métrologie (compte, montant) ; un scalaire, vecteur, nombre d’objets ou d’une autre manière de dénommer la valeur d’une collection ou un groupe de choses.) d'objets à transmettre on devra prévoir un ou plusieurs octets supplémentaires pour transmettre cette quantité. Si en plus ce ne sont pas seulement des nombres entiers, mais des objets quelconques que l'on souhaite transmettre, il faudra prévoir d'y associer les informations qui permettront de coder le type précis de chaque objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut être désigné par une étiquette verbale. Il est...).

Plus globalement, il est nécessaire de faire un a priori sur les ressources disponibles au moment de la désérialisation pour déterminer les informations que l'on pourra reconstruire à l'aide d'une simple référence et celles qu'il est nécessaires d'encoder. C'est par exemple le cas des polices de caractères dans un fichier ( Un fichier est un endroit où sont rangées des fiches. Cela peut-être un meuble, une pièce, un bâtiment, une base de données informatique. Par exemple : ...) PDF : selon que l'on souhaite privilégier l'exactitude du rendu (Le rendu est un processus informatique calculant l'image 2D (équivalent d'une photographie) d'une scène créée dans un logiciel de modélisation 3D comportant à la fois des objets et des sources de lumière et...) sur toutes les machines ou la taille du fichier généré, il est possible de transmettre la définition (Une définition est un discours qui dit ce qu'est une chose ou ce que signifie un nom. D'où la division entre les définitions réelles et les définitions nominales.) complète du tracé des caractères ou de se contenter de transmettre le nom de la police et quelques autres caractéristiques de base, en laissant le soin aux machines cibles de rechercher la police la plus adaptée parmi celles dont elle dispose.

Il existe enfin des informations dont la nature ne permet pas d'être sérialisées et qu'il faudra de toute façon reconstruire. C'est le cas par exemple d'un descripteur de fichier (En informatique, un descripteur de fichier est une clé abstraite pour accéder à un fichier. On utilise généralement ce terme pour les systèmes d'exploitation POSIX. Dans la terminologie de Microsoft Windows et dans le contexte de la...). D'une machine à l'autre et même d'une exécution à l'autre du programme sur une même machine, ces descripteurs sont attribués de manière arbitraire par le système d'exploitation : Il n'y a donc pas de sens (SENS (Strategies for Engineered Negligible Senescence) est un projet scientifique qui a pour but l'extension radicale de l'espérance de vie humaine. Par une évolution progressive allant...) à sérialiser leur contenu et il faudra plutôt encoder des informations qui permettront de le reconstruire lors de la désérialisation (comme par exemple le nom complet du fichier accédé via le descripteur). Un autre cas typique, est la sérialisation des pointeurs, qui fait l'objet d'une technique spécifique : la mutation de pointeurs (swizzling en anglais).

Encodage

Le choix de base est entre format binaire et format texte :

  • les fichiers binaires sont généralement plus compacts, le code pour parser ce type de données est plus simple à mettre au point (Graphie), la lecture et l'écriture sont moins exigeantes en ressources processeurs ;
  • les fichiers textes sont plus simples à vérifier ou à modifier manuellement, ils posent moins de problèmes de portabilité, ils sont plus simple à maintenir et à faire évoluer en fonction des besoins.

Codages binaires

L'une des contraintes des codages binaires est la portabilité. Par exemple une machine utilisant un autre modèle de processeur (Le processeur, ou CPU (de l'anglais Central Processing Unit, « Unité centrale de traitement »), est le composant de l'ordinateur qui exécute les programmes informatiques. Avec la mémoire notamment,...) que l'ordinateur (Un ordinateur est une machine dotée d'une unité de traitement lui permettant d'exécuter des programmes enregistrés. C'est un ensemble de circuits...) d'origine doit pouvoir déserialiser un bloc de données, en prenant en compte les problèmes d'alignement de données ou d'endianness (En informatique, certaines données telles que les nombres entiers peuvent être représentées sur plusieurs octets. L'ordre dans lequel ces octets sont organisés en mémoire ou dans une...). C'est pourquoi, même si l'objet ne comporte pas de pointeurs, la simple copie de l'empreinte mémoire (D'une manière générale, la mémoire est le stockage de l'information. C'est aussi le souvenir d'une information.) d'un objet n'est généralement pas une solution acceptable.

Il faut donc ici aussi utiliser des encodages conventionnels. Il est assez courant d'utiliser les conventions suivantes : aucun alignement; encodage des types C entiers en fonction de leur empreinte mémoire tous au format big-endian, les nombres en virgule flottante utilisent la norme (Une norme, du latin norma (« équerre, règle ») désigne un état habituellement répandu ou moyen considéré le plus souvent comme une règle à suivre. Ce terme...) IEEE 754.

Des protocoles comme GIOP de CORBA ou RMI de Java emploient tous deux des codages binaires.

Codages textes

Définir un codage (De façon générale un codage permet de passer d'une représentation des données vers une autre.) textuel nécessite de choisir un protocole pour séparer les champs, pour encoder des données binaires (par exemple uuencode, base64 ou échappement des caractères non ASCII)...

Il est relativement courant d'utiliser un dérivé du format XML.

Les protocoles SOAP (SOAP (ancien acronyme de Simple Object Access Protocol) est un protocole de RPC orienté objet bâti sur XML.) et XML-RPC emploient tous deux des codages en format texte.

Sérialisation d'un objet atomique

Un objet atomique est un objet qui ne comporte aucune référence vers d'autres objets.

Type de l'objet

Selon les possibilités du langage, la réanimation (La réanimation est une discipline médicale qui s'attache à prendre en charge les patients présentant ou susceptibles de présenter une ou plusieurs défaillances viscérales aiguës mettant directement...) pourra utiliser un mécanisme de métaclasse (Une métaclasse est une classe dont les instances sont des classes. Autrement dit, une métaclasse est la classe d'une classe.) apporté par le langage, ou une fabrique spécifique. Dans tous les cas, il est nécessaire de conserver les informations qui permettront de sélectionner le type d'objet à créer.

Si le nombre de types d'objets à sérialiser est connu à l'avance, les informations de type peuvent être codées de manière très compacte (par exemple, sur un simple octet si celles-ci n'excèdent pas 256).

Sinon, il sera nécessaire d'utiliser des conventions, comme par exemple celle des packages du langage Java. Ces noms conventionnels pouvant être volumineux, il pourra être utile de prévoir un mécanisme d'alias pour éviter les répétitions lors du traitement de plusieurs objets du même type.

Il est aussi possible de transmettre directement le code implémentant le type encodé. C'est le cas par exemple du module marshal de la bibliothèque standard du langage python, et c'est un mécanisme qui est plus généralement supporté par tous les langages interprétés supportant la mise en cache de leur byte code.

Données

Chaque type de donnée (Dans les technologies de l'information, une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction, d'un événement, etc.) est responsable de l'archivage (L'archivage est l'action de mettre en archive, d'archiver. Employé surtout à l'origine pour les seuls documents électroniques, comme un synonyme de stockage ou de sauvegarde, il tend de plus en plus à être utilisé pour tous les documents,...) et de la restauration de ses données membres. Pour les types composites, il s'agit de sérialiser chacun des champs dans un ordre prédéfini.

Types hiérarchiques

En programmation orientée objet (La programmation par objet (du terme anglo-saxon Object-Oriented Programming ou OOP), est un paradigme de programmation, il consiste en la définition et l'assemblage de briques...), il est nécessaire de traiter les données gérées par le type de base avant de d'archiver les données du type dérivé.

Parcours d'un graphe (Le mot graphe possède plusieurs significations. Il est notamment employé :) d'objets

C'est une problématique qui est assez commune et que l'on retrouve par exemple quand on cherche à implémenter un clonage (Le clonage désigne principalement deux processus. C'est d'une part la multiplication naturelle ou artificielle à l'identique d'un être vivant c'est-à-dire avec conservation exacte du...), ou un ramasse-miettes...

Des algorithmes plus ou moins performants peuvent être choisis suivant les à-priori que l'on peut faire sur la topologie (La topologie est une branche des mathématiques concernant l'étude des déformations spatiales par des transformations continues (sans arrachages ni recollement des structures).) du graphe:

  • arbre (Un arbre est une plante terrestre capable de se développer par elle-même en hauteur, en général au delà de sept mètres. Les arbres acquièrent une...)
  • graphe uniquement connecté aux feuilles
  • graphe quelconque

Parcours manuel

Dans le cas général il est nécessaire de mémoriser les objets parcourus pour détecter les cycles.

Ce n'est pas une bonne idée d'utiliser les objets eux même pour pointer leur statut visité:

  • la méthode de sérialisaton se met à muter les objets, ce qui perturbe les optimisations de type Copy-On-Write utilisé par exemple lors d'un fork sous UNIX.
  • cela pose des problème de réentrance (En informatique, la réentrance est la propriété pour un morceau de programme d'être utilisé simultanément par plusieurs tâches utilisatrices. La...)

Il est préférable d'utiliser une table de hashage (adresse de l'objet, compteur) qui sera par ailleurs utilisée pour implémenter la mutation de pointeur. Il faut alors veiller à retenir chaque objet pour éviter les collisions d'adresses avec de nouveaux objets.

Parcours par introspection

Les langages qui supportent l'introspection peuvent fournir un mécanisme de sérialisation par défaut.

Désérialisation

La désérialisation pose également un certain nombre de problèmes comme la réanimation d'objet non mutable. Les objets ne peuvent pas être utilisés pendant la désérialisation

La désérialisation pose aussi des problèmes de sûreté du typage.

Sécurité

La désérialisation nécessite l'interprétation de données qui peuvent venir d'une source qui est hors de contrôle (Le mot contrôle peut avoir plusieurs sens. Il peut être employé comme synonyme d'examen, de vérification et de maîtrise.). La sérialisation peut aussi entrainer l'exposition de données privées.

Gestion des versions

Il est souvent nécessaire de garantir une compatibilité ascendante ou descendante, c’est-à-dire la possibilité de relire ses données avec une nouvelle version du logiciel (En informatique, un logiciel est un ensemble d'informations relatives à des traitements effectués automatiquement par un appareil informatique. Y sont inclus les instructions de traitement, regroupées sous forme de...) ou de permettre a une ancienne version du logiciel de lire des données créées à partir d'une version plus récente. Cela nécessite d'une part un mode de versionnage qui permet de connaître les versions compatibles et un moyen pour les versions les plus anciennes d'ignorer les données qu'elle ne savent pas interpréter.

Alternatives (Alternatives (titre original : Destiny Three Times) est un roman de Fritz Leiber publié en 1945.)

La sérialisation est un mécanisme de codage atomique: il n'est pas destiné à permettre d'accéder à un fragment des données sans avoir tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) décodé.

Il existe des mécanismes comme NSKeyedArchiver de la bibliothèque Cocoa qui permet une réanimation partielle des objets. Il se rapprochent des système de base de données (En informatique, une base de données (Abr. : « BD » ou « BDD ») est un lot d'informations stockées dans un dispositif informatique. Les technologies...)

Page générée en 0.282 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique