CodeGym /Java-Blog /Random-DE /Java-Serialisierungsformate
Autor
Andrey Gorkovenko
Frontend Engineer at NFON AG

Java-Serialisierungsformate

Veröffentlicht in der Gruppe Random-DE
Hallo! Lassen Sie uns über Serialisierung sprechen. Sie erinnern sich wahrscheinlich daran, dass wir bereits Lektionen zum Thema Serialisierung hatten. Und so haben wir es gemacht :) Hier ist das erste und hier ist das zweite. Wenn Sie sich nicht genau erinnern, wie Serialisierung funktioniert, warum Serialisierung erforderlich ist und welche Tools Java für die Serialisierung bereitstellt, können Sie diese Lektionen durchgehen. In der heutigen Lektion geht es um Theorie. Wir werden uns die Serialisierungsformate genauer ansehen. Erinnern wir uns zunächst daran, was Serialisierung ist. Bei der Serialisierung wird der Zustand eines Objekts in einer Bytefolge gespeichert. Unter Deserialisierung versteht man den Prozess der Wiederherstellung eines Objekts aus diesen Bytes. Ein Java-Objekt kann serialisiert und über ein Netzwerk gesendet werden (z. B. an einen anderen Computer). Die Bytefolge kann in verschiedenen Formaten dargestellt werden. Sie kennen dieses Konzept aus der normalen Computernutzung. Beispielsweise kann ein elektronisches Buch (oder ein einfaches Textdokument) in verschiedenen Formaten geschrieben werden:
  • docx (Microsoft Word-Format);
  • pdf (Adobe-Format);
  • mobi (wird häufig auf Amazon Kindle-Geräten verwendet);
  • und vieles mehr (ePub, djvu, fb2, etc.).
Das Ziel scheint in jedem Fall dasselbe zu sein: den Text in einer für Menschen lesbaren Form darzustellen. Dennoch haben die Menschen viele verschiedene Formate erfunden. Ohne auf die Details ihrer Arbeit einzugehen, können wir davon ausgehen, dass sie gute Gründe hatten. Jedes Format hat im Vergleich zu den anderen seine eigenen Vor- und Nachteile. Vielleicht wurden verschiedene Serialisierungsformate nach denselben Prinzipien erstellt? Ausgezeichnete Vermutung, Student! :) Das ist genau richtig. Die Realität ist, dass das Versenden von Daten über ein Kabel (oder drahtlos) eine heikle Angelegenheit ist und viele Faktoren umfasst. Wer sendet die Daten? Wohin? Welche Lautstärke? Wird der Empfänger ein Mensch oder ein Computer sein (dh sollten die Daten für Menschen lesbar sein)? Welches Gerät liest die Daten? Offensichtlich sind diese Situationen unterschiedlich. Es ist eine Sache, ein 500-KB-Bild von einem Smartphone an ein anderes zu senden. Und ganz anders sieht es aus, wenn es um 500 Terabyte Geschäftsdaten geht, die optimal komprimiert und schnellstmöglich versendet werden müssen. Machen wir uns mit den wichtigsten Serialisierungsformaten vertraut und betrachten die Vor- und Nachteile jedes einzelnen davon!

JSON

JavaScript-Objekt-Notation. Sie wissen bereits ein wenig über dieses Format! Wir haben in dieser Lektion darüber gesprochen und hier die Serialisierung in JSON behandelt . Es hat seinen Namen nicht ohne Grund. In JSON konvertierte Java-Objekte sehen tatsächlich genauso aus wie Objekte in JavaScript. Sie müssen kein JavaScript beherrschen, um unser Objekt zu verstehen:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Wir sind nicht darauf beschränkt, ein einzelnes Objekt zu versenden. Das JSON-Format kann auch ein Array von Objekten darstellen:

[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Da JSON JavaScript-Objekte darstellt, unterstützt es die folgenden JavaScript-Datenformate:
  • Saiten;
  • Zahlen;
  • Gegenstände;
  • Arrays;
  • Boolesche Werte (wahr und falsch);
  • Null.
Was sind die Vorteile von JSON?
  1. Für Menschen lesbares Format. Dies ist ein offensichtlicher Vorteil, wenn Ihr Endbenutzer ein Mensch ist. Angenommen, Ihr Server verfügt über eine Datenbank mit einem Flugplan. Ein menschlicher Kunde, der zu Hause an seinem Computer sitzt, fordert über eine Webanwendung Daten aus dieser Datenbank an. Da Sie Daten in einem Format bereitstellen müssen, das er verstehen kann, ist JSON eine großartige Lösung.

  2. Einfachheit. Es ist super einfach :) Oben haben wir ein Beispiel für zwei JSON-Dateien gegeben. Und selbst wenn Sie noch nie von JavaScript (geschweige denn von JavaScript-Objekten) gehört haben, können Sie die Art der dort beschriebenen Objekte leicht verstehen.
    Die gesamte JSON-Dokumentation besteht aus einer Webseite mit einigen Bildern.

  3. Weit verbreitete Nutzung. JavaScript ist die dominierende Frontend-Sprache und hat ihre eigenen Anforderungen. Die Verwendung von JSON ist ein Muss. Daher verwenden zahlreiche Webdienste JSON als Datenaustauschformat. Jede moderne IDE unterstützt das JSON-Format (einschließlich IntelliJ IDEA). Es wurden zahlreiche Bibliotheken für alle möglichen Programmiersprachen geschrieben, um die Arbeit mit JSON zu ermöglichen.

Sie haben beispielsweise bereits in einer Lektion mit der Jackson-Bibliothek gearbeitet, in der wir gelernt haben, Java-Objekte in JSON zu serialisieren. Aber neben Jackson haben wir zum Beispiel GSON , eine sehr praktische Bibliothek von Google.

YAML

Ursprünglich stand YAML für „Yet Another Markup Language“. Als es begann, wurde es als Konkurrent von XML positioniert. Im Laufe der Zeit bedeutet YAML nun „YAML Ain't Markup Language“. Was ist es genau? Stellen wir uns vor, dass wir drei Klassen erstellen müssen, um Charaktere in einem Computerspiel darzustellen: Krieger, Magier und Dieb. Sie werden die folgenden Eigenschaften haben: Kraft, Beweglichkeit, Ausdauer, eine Reihe von Waffen. So würde eine YAML-Datei, die unsere Klassen beschreibt, aussehen:

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
Eine YAML-Datei hat eine Baumstruktur: Einige Elemente sind in anderen verschachtelt. Wir können die Verschachtelung mithilfe einer bestimmten Anzahl von Leerzeichen steuern, mit denen wir jede Ebene bezeichnen. Welche Vorteile bietet das YAML-Format?
  1. Für Menschen lesbar. Auch wenn Sie eine YAML-Datei ohne Beschreibung sehen, können Sie die darin beschriebenen Objekte leicht verstehen. YAML ist so lesbar, dass die Website yaml.org eine gewöhnliche YAML-Datei ist :)

  2. Kompaktheit. Die Dateistruktur wird mit Leerzeichen erstellt: Klammern oder Anführungszeichen sind nicht erforderlich.

  3. Unterstützung nativer Datenstrukturen für Programmiersprachen. Der große Vorteil von YAML gegenüber JSON und vielen anderen Formaten besteht darin, dass es verschiedene Datenstrukturen unterstützt. Sie beinhalten:

    • !!map
      Eine ungeordnete Menge von Schlüssel-Wert-Paaren, die keine Duplikate haben dürfen;

    • !!omap
      Eine geordnete Folge von Schlüssel-Wert-Paaren, die keine Duplikate haben dürfen;

    • !!Paare:
      Eine geordnete Folge von Schlüssel-Wert-Paaren, die Duplikate haben können;

    • !!set
      Eine ungeordnete Folge von Werten, die einander nicht entsprechen;

    • !!seq
      Eine Folge beliebiger Werte;

    Einige dieser Strukturen werden Sie aus Java kennen! :) Das bedeutet, dass verschiedene Datenstrukturen aus Programmiersprachen in YAML serialisiert werden können.

  4. Möglichkeit, Anker und Alias ​​zu verwenden

    Mit diesen Markierungen können Sie ein Element in einer YAML-Datei identifizieren und dann im Rest der Datei darauf verweisen, wenn es wiederholt vorkommt. Ein Anker wird mit dem Symbol & erstellt und ein Alias ​​wird mit * erstellt .

    Angenommen, wir haben eine Datei, in der Bücher von Leo Tolstoi beschrieben werden. Um zu vermeiden, dass für jedes Buch der Name des Autors ausgeschrieben wird, erstellen wir einfach den Leo-Anker und verweisen bei Bedarf mit einem Alias ​​darauf:

    
    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
    

    Wenn diese Datei analysiert wird, wird der Wert „Leo Tolstoy“ an den richtigen Stellen ersetzt, an denen wir unsere Aliase haben.

  5. YAML kann Daten in anderen Formaten einbetten. Zum Beispiel 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
            }
          ]
    

Andere Serialisierungsformate

XML

Dieses Format basiert auf einem Tag-Baum.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Jedes Element besteht aus einem öffnenden und schließenden Tag (<> und </>). Jedes Element kann verschachtelte Elemente haben. XML ist ein gängiges Format, das genauso gut ist wie JSON und YAML (wenn es um echte Projekte geht). Wir haben eine separate Lektion über XML .

BSON (binärer JSON)

Wie der Name schon sagt, ist BSON JSON sehr ähnlich, ist jedoch nicht für Menschen lesbar und verwendet Binärdaten. Dadurch eignet es sich sehr gut zum Speichern und Übertragen von Bildern und anderen Anhängen. Darüber hinaus unterstützt BSON einige Datentypen, die in JSON nicht verfügbar sind. Beispielsweise kann eine BSON-Datei ein Datum (im Millisekundenformat) oder sogar einen Teil des JavaScript-Codes enthalten. Die beliebte NoSQL-Datenbank MongoDB speichert Informationen im BSON-Format.

Positionsbasiertes Protokoll

In manchen Situationen müssen wir die Menge der gesendeten Daten drastisch reduzieren (z. B. wenn wir viele Daten haben und die Last reduzieren müssen). In dieser Situation können wir das positionsbasierte Protokoll verwenden, d. h. Parameterwerte ohne die Namen der Parameter selbst senden.

"Leo Tolstoy" | "Anna Karenina" | 1873
Daten in diesem Format benötigen ein Vielfaches weniger Platz als eine vollständige JSON-Datei. Natürlich gibt es noch andere Serialisierungsformate, aber Sie müssen jetzt nicht alle kennen :) Es ist gut, wenn Sie bei der Entwicklung von Anwendungen mit den aktuellen Industriestandardformaten vertraut sind und sich an deren Vorteile und Unterschiede erinnern andere. Und damit ist unsere Lektion zu Ende :) Vergessen Sie nicht, heute ein paar Aufgaben zu lösen! Bis zum nächsten Mal! :) :)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION