JavaRush /Blog Java /Random-FR /Formats de sérialisation en Java

Formats de sérialisation en Java

Publié dans le groupe Random-FR
Bonjour! Parlons de la sérialisation en Java. Vous vous souvenez probablement que nous avons déjà eu des cours sur la sérialisation. C'est vrai :) Voici le premier Et voici le deuxième Si vous ne vous souvenez pas très bien comment fonctionne la sérialisation, pourquoi elle est nécessaire et quels outils existent en Java pour cela, vous pouvez parcourir ces conférences. La conférence d'aujourd'hui sera théorique et nous y examinerons de plus près les formats de sérialisation. Formats de sérialisation en Java - 1Tout d’abord, rappelons 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 reconstruction d'un objet à partir de ces octets. Un objet Java peut être sérialisé et transféré sur un réseau (par exemple, vers un autre ordinateur). Ainsi, cette même séquence d’octets peut être représentée sous différents formats. Cela vous est familier grâce à votre utilisation quotidienne de l'ordinateur. Par exemple, le livre électronique (ou simple document texte) que vous lisez peut être rédigé dans de nombreux formats différents :
  • docx (format Microsoft Word);
  • pdf (format Adobe);
  • mobi (couramment utilisé dans les appareils Amazon Kindle) ;
  • et bien plus encore (ePub, djvu, fb2...).
Il semblerait que la tâche soit la même : présenter le texte sous une forme lisible par l'homme. Mais les gens ont inventé toute une série de formats. Même sans entrer dans les détails de leur travail, on peut supposer que cela a été fait pour une raison. Chacun d’eux a probablement ses propres avantages et inconvénients par rapport aux autres. Peut-être que les formats de sérialisation ont été créés selon le même principe ? Eh bien, bonne idée, étudiant ! :) C'est comme ça. Le fait est que la transmission de données à distance est une chose assez délicate et qui implique de nombreux facteurs. Qui transmet les données ? Où? Quel volume ? Le destinataire sera-t-il une personne ou une machine (c'est-à-dire que les données doivent être lisibles par l'homme) ? Quel type d'appareil lira les données ? Évidemment, les situations sont différentes. C'est une chose lorsque vous devez transférer une image de 500 Ko d'un smartphone à un autre. Et c’est complètement différent lorsqu’il s’agit de 500 téraoctets de données d’entreprise qui doivent être compressées le plus efficacement possible et en même temps transférées le plus rapidement possible. Jetons un coup d'œil aux principaux formats de sérialisation et examinons les avantages et les inconvénients de chacun !

JSON

Notation d'objet JavaScript. Vous le connaissez déjà un peu ! Nous en avons parlé dans cette conférence et nous avons examiné la sérialisation en JSON ici . Il tire son nom pour une raison. Les objets Java convertis en JSON ressemblent en réalité exactement aux objets JavaScript. Vous n'avez pas besoin de connaître JavaScript pour comprendre la signification de notre objet :
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Il n'est pas nécessaire de transmettre un objet. JSON peut également contenir un tableau d'objets :
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Puisque JSON est un objet JavaScript, il prend en charge les formats de données JavaScript suivants :
  • cordes;
  • nombres (nombre);
  • objets (objet);
  • tableaux (tableau);
  • valeurs booléennes (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, votre serveur stocke une base de données avec les horaires des vols. Un client humain demande des données à cette base de données à l’aide d’une application Web alors qu’il est assis chez lui devant un ordinateur. Puisque vous devez fournir les données dans un format qu’il peut comprendre, JSON est une excellente solution.

  2. Simplicité. On pourrait dire que c'est élémentaire :) Ci-dessus nous avons donné un exemple de deux fichiers JSON. Et même si vous n'avez jamais entendu parler de l'existence de JavaScript (et encore moins de ses objets), vous pouvez facilement comprendre quels types d'objets y sont décrits.
    L'intégralité de la documentation JSON est une page Web avec quelques images.

  3. Répandu. JavaScript est le langage frontal dominant et il dicte ses termes. Utiliser 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). De nombreuses bibliothèques ont été écrites pour travailler avec JSON pour tous les langages de programmation possibles.

Par exemple, vous avez déjà travaillé avec la bibliothèque Jackson lors du cours où nous avons appris à sérialiser des objets Java en JSON. Mais outre Jackson, il existe, par exemple, GSON , une bibliothèque très pratique de Google.

YAML

Au début de son existence, il signifiait Yet Another Markup Language – « un autre langage de balisage ». Il se positionnait à l’époque comme un concurrent de XML. Aujourd'hui, au fil du temps, il signifie « YAML Ain't Markup Language » (« YAML n'est pas un langage de balisage »). Comment est-il? Imaginons que nous devions créer 3 classes de personnages pour notre jeu informatique : Guerrier, Mage et Voleur. Ils auront les caractéristiques suivantes : force, agilité, endurance et un ensemble d'armes. Voici à quoi ressemblera notre fichier YAML avec les descriptions de 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
Le 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 pour désigner chaque niveau. Quels sont les avantages du format YAML ?
  1. Lisible par l'homme. Encore une fois, même si vous voyez un fichier yaml sans description, vous pouvez facilement comprendre quels objets y sont décrits. YAML indique à quel point la page principale de yaml.org est un fichier yaml normal :)

  2. Compacité. La structure du fichier est formée 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 des langages de programmation. Un énorme avantage de YAML par rapport à JSON et à de nombreux autres formats est qu'il prend en charge différentes structures de données. Parmi eux:

    • !!map
      Une collection non ordonnée de paires clé:valeur sans possibilité de doublons ;

    • !!omap
      Une séquence ordonnée de paires clé:valeur sans possibilité de doublons ;

    • !!pairs :
      une séquence ordonnée de paires clé:valeur avec possibilité de doublons ;

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

    • !!seq
      Séquence de valeurs arbitraires ;

    Certaines de ces structures vous seront familières depuis Java ! :) Grâce à cette fonctionnalité, vous pouvez sérialiser diverses structures de données des langages de programmation au format YAML.

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

    Traduction des mots « ancre » et « alias » - « ancre » et « pseudonyme ». En principe, il décrit assez précisément l'essence de ces termes dans YAML.

    Ils permettent d'identifier un élément dans un fichier yaml, et d'y faire référence dans le reste du fichier s'il apparaît de manière répétée. L'ancre est créée à l'aide du symbole &et l'alias est créé à l'aide de *.

    Disons que nous avons un dossier contenant des descriptions des livres de Léon Tolstoï. Pour éviter d'écrire manuellement le nom de l'auteur à chaque fois, nous allons simplement créer une ancre "leo" et y faire référence 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 nous lirons ce fichier avec un analyseur, la valeur « Léon Tolstoï » sera remplacée aux bons endroits à la place de notre alias.

  5. Vous pouvez intégrer des données dans d'autres formats dans YAML. 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 ce que l'on appelle l'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 courant, non inférieur à JSON et YAML (si nous parlons d'utilisation dans des projets réels). Nous avons une conférence séparée sur XML .

BSON (JSON binaire)

Comme son nom l’indique, il est très similaire à JSON, mais n’est pas lisible par l’homme et fonctionne sur des données au format binaire. Cela le rend très pratique pour stocker et transférer des images et autres pièces jointes. De plus, BSON prend en charge certains types de données qui ne sont pas disponibles dans JSON. Par exemple, vous pouvez écrire une date (au format milliseconde) ou même un morceau de code JavaScript dans un fichier BSON. La base de données NoSQL populaire MongoDB 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 transférées (par exemple, s'il y a beaucoup de données et que nous devons réduire la charge). Dans cette situation, nous pouvons utiliser un protocole basé sur la position , c'est-à-dire transmettre les valeurs des paramètres sans les noms des paramètres eux-mêmes.
"Leo Tolstoy" | "Anna Karenina" | 1873
Les données dans ce format prennent beaucoup moins de place qu'un fichier JSON à part entière. Bien sûr, il existe d'autres formats de sérialisation, mais vous n'avez pas besoin de tous les connaître maintenant :) Il est bon de se familiariser avec les formats qui sont désormais la norme de l'industrie pour le développement d'applications et de se souvenir de leurs avantages et de leurs différences les uns par rapport aux autres. . Et notre conférence est terminée :) N'oubliez pas de résoudre quelques problèmes aujourd'hui ! À la prochaine! :)
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION