CodeGym/Blog Java/Random-FR/Formats de sérialisation Java
Auteur
Andrey Gorkovenko
Frontend Engineer at NFON AG

Formats de sérialisation Java

Publié dans le groupe Random-FR
membres
Salut! Parlons de sérialisation. Vous vous souvenez probablement que nous avons déjà eu des leçons sur la sérialisation. Et c'est ce que nous avons fait :) Voici le premier Et voici le deuxième. Si vous ne vous rappelez pas bien comment fonctionne la sérialisation, pourquoi la sérialisation est nécessaire et quels outils Java possède pour la sérialisation, vous pouvez parcourir ces leçons. La leçon d'aujourd'hui portera sur la théorie. Nous allons examiner de plus près les formats de sérialisation. Rappelons tout d'abord ce qu'est la sérialisation. La sérialisation est le processus de stockage de l'état d'un objet dans une séquence d'octets. La désérialisation est le processus de restauration d'un objet à partir de ces octets. Un objet Java peut être sérialisé et envoyé sur un réseau (par exemple, vers un autre ordinateur). La séquence d'octets peut être représentée dans différents formats. Vous connaissez ce concept grâce à l'utilisation ordinaire d'un ordinateur. Par exemple, un livre électronique (ou un simple document texte) peut être écrit dans une multitude de formats différents :
  • docx (format Microsoft Word);
  • pdf (format Adobe);
  • mobi (couramment utilisé sur les appareils Amazon Kindle) ;
  • et bien plus encore (ePub, djvu, fb2, etc.).
Dans chaque cas, l'objectif semble être le même : présenter le texte sous une forme lisible par l'homme. Pourtant, les gens ont inventé de nombreux formats différents. Sans entrer dans les détails de leur travail, on peut supposer qu'ils avaient de bonnes raisons. Chaque format a ses propres avantages et inconvénients par rapport aux autres. Peut-être que divers formats de sérialisation ont été créés selon ces mêmes principes ? Excellente estimation, étudiant ! :) C'est exactement ça. La réalité est que l'envoi de données sur un fil (ou sans fil) est une affaire délicate, et cela implique de nombreux facteurs. Qui envoie les données ? Où aller ? Quel volume ? Le destinataire sera-t-il un être humain ou un ordinateur (c'est-à-dire que les données doivent-elles être lisibles par l'homme) ? Quel appareil lira les données ? Évidemment, ces situations sont différentes. C'est une chose d'envoyer une image de 500 Ko d'un smartphone à un autre. Et c'est tout autre chose si l'on parle de 500 téraoctets de données d'entreprise qui doivent être compressées de manière optimale et envoyées le plus rapidement possible. Faisons connaissance avec les principaux formats de sérialisation et considérons les avantages et les inconvénients de chacun d'eux !

JSON

Notation d'objet JavaScript. Vous connaissez déjà un peu ce format ! Nous en avons parlé dans cette leçon , et nous avons couvert la sérialisation en JSON ici même . Il a obtenu son nom pour une raison. Les objets Java convertis en JSON ressemblent en fait exactement aux objets en JavaScript. Vous n'avez pas besoin de connaître JavaScript pour comprendre notre objet :
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Nous ne sommes pas limités à l'envoi d'un seul objet. Le format JSON peut également représenter un tableau d'objets :
[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

 {
   "title": "Demons",
   "author": "Fyodor Dostoyevsky",
   "year": 1872
 },

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Étant donné que JSON représente des objets JavaScript, il prend en charge les formats de données JavaScript suivants :
  • cordes ;
  • Nombres;
  • objets;
  • tableaux ;
  • booléens (vrai et faux) ;
  • nul.
Quels sont les avantages de JSON ?
  1. Format lisible par l'homme. C'est un avantage évident si votre utilisateur final est humain. Par exemple, supposons que votre serveur dispose d'une base de données avec un horaire de vols. Un client humain, assis devant son ordinateur à la maison, demande des données à cette base de données à l'aide d'une application Web. Parce que vous devez fournir des données dans un format qu'il peut comprendre, JSON est une excellente solution.

  2. Simplicité. C'est super simple :) Ci-dessus, nous avons donné un exemple de deux fichiers JSON. Et même si vous n'avez pas entendu parler de JavaScript (sans parler des objets JavaScript), vous pouvez facilement comprendre le type d'objets qui y sont décrits.
    L'ensemble de la documentation JSON se compose d'une page Web avec quelques images.

  3. Utilisation généralisée. JavaScript est le langage frontal dominant et il a ses propres exigences. L'utilisation de JSON est indispensable. Par conséquent, un grand nombre de services Web utilisent JSON comme format d'échange de données. Chaque IDE moderne prend en charge le format JSON (y compris IntelliJ IDEA). Un tas de bibliothèques ont été écrites pour toutes sortes de langages de programmation pour permettre de travailler avec JSON.

Par exemple, vous avez déjà travaillé avec la bibliothèque Jackson dans une leçon où nous avons appris à sérialiser des objets Java en JSON. Mais en plus de Jackson, nous avons, par exemple, GSON , qui est une bibliothèque très pratique de Google.

YAML

Initialement, YAML signifiait "Yet Another Markup Language". A ses débuts, il se positionnait comme un concurrent de XML. Maintenant, avec le passage du temps, YAML en est venu à signifier "YAML n'est pas un langage de balisage". C'est quoi exactement? Imaginons que nous devions créer 3 classes pour représenter les personnages d'un jeu vidéo : Guerrier, Mage et Voleur. Ils auront les caractéristiques suivantes : force, agilité, endurance, un ensemble d'armes. Voici à quoi ressemblerait un fichier YAML décrivant nos classes :
classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear

 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
Un fichier YAML a une structure arborescente : certains éléments sont imbriqués dans d'autres. Nous pouvons contrôler l'imbrication en utilisant un certain nombre d'espaces, que nous utilisons pour désigner chaque niveau. Quels sont les avantages du format YAML ?
  1. Lisible par l'homme. Encore une fois, même en voyant un fichier YAML sans description, vous pouvez facilement comprendre les objets qu'il décrit. YAML est tellement lisible par l'homme que le site Web yaml.org est un fichier YAML ordinaire :)

  2. Compacité. La structure du fichier est créée à l'aide d'espaces : il n'est pas nécessaire d'utiliser des crochets ou des guillemets.

  3. Prise en charge des structures de données natives pour les langages de programmation. L'énorme avantage de YAML par rapport à JSON et à de nombreux autres formats est qu'il prend en charge diverses structures de données. Ils comprennent:

    • !!map
      Un ensemble non ordonné de paires clé-valeur qui ne peuvent pas avoir de doublons ;

    • !!omap
      Une séquence ordonnée de paires clé-valeur qui ne peuvent pas avoir de doublons ;

    • !!pairs :
      une séquence ordonnée de paires clé-valeur pouvant avoir des doublons ;

    • !!set
      Une séquence non ordonnée de valeurs qui ne sont pas égales les unes aux autres ;

    • !!seq
      Une séquence de valeurs arbitraires ;

    Vous reconnaîtrez certaines de ces structures de Java ! :) Cela signifie que diverses structures de données de langages de programmation peuvent être sérialisées en YAML.

  4. Possibilité d'utiliser l'ancre et l'alias

    Ces marqueurs vous permettent d'identifier un élément dans un fichier YAML, puis de s'y référer dans le reste du fichier s'il se produit à plusieurs reprises. Une ancre est créée à l'aide du symbole & , et un alias est créé à l'aide de * .

    Supposons que nous ayons un fichier décrivant des livres de Léon Tolstoï. Afin d'éviter d'écrire le nom de l'auteur pour chaque livre, nous créons simplement l'ancre leo et nous y référons en utilisant un alias lorsque nous en avons besoin :

    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859

    Lorsque ce fichier est analysé, la valeur "Léo Tolstoï" est substituée aux bons endroits où nous avons nos alias.

  5. YAML peut intégrer des données dans d'autres formats. Par exemple, JSON :

    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]

Autres formats de sérialisation

XML

Ce format est basé sur un arbre de balises.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Chaque élément est constitué d'une balise ouvrante et fermante (<> et </>). Chaque élément peut avoir des éléments imbriqués. XML est un format commun qui est tout aussi bon que JSON et YAML (si nous parlons de projets réels). Nous avons une leçon séparée sur XML .

BSON (JSON binaire)

Comme son nom l'indique, BSON est très similaire à JSON, mais il n'est pas lisible par l'homme et utilise des données binaires. En conséquence, il est très bon pour stocker et transférer des images et autres pièces jointes. De plus, BSON prend en charge certains types de données non disponibles dans JSON. Par exemple, un fichier BSON peut inclure une date (au format milliseconde) ou même un morceau de code JavaScript. La populaire base de données MongoDB NoSQL stocke les informations au format BSON.

Protocole basé sur la position

Dans certaines situations, nous devons réduire considérablement la quantité de données envoyées (par exemple, si nous avons beaucoup de données et que nous devons réduire la charge). Dans cette situation, nous pouvons utiliser le protocole basé sur la position, c'est-à-dire envoyer des valeurs de paramètres sans les noms des paramètres eux-mêmes.
"Leo Tolstoy" | "Anna Karenina" | 1873
Les données dans ce format occupent plusieurs fois moins d'espace qu'un fichier JSON complet. Bien sûr, il existe d'autres formats de sérialisation, mais vous n'avez pas besoin de tous les connaître pour le moment :) C'est bien si vous connaissez les formats standard actuels de l'industrie lors du développement d'applications, et souvenez-vous de leurs avantages et de la façon dont ils diffèrent d'un un autre. Et avec cela, notre leçon touche à sa fin :) N'oubliez pas de résoudre quelques tâches aujourd'hui ! Jusqu'à la prochaine fois! :)
Commentaires
  • Populaires
  • Nouveau
  • Anciennes
Tu dois être connecté(e) pour laisser un commentaire
Cette page ne comporte pas encore de commentaires