JavaRush /Java-Blog /Random-DE /Serialisierungsformate in Java

Serialisierungsformate in Java

Veröffentlicht in der Gruppe Random-DE
Hallo! Lassen Sie uns über die Serialisierung in Java sprechen. Sie erinnern sich wahrscheinlich daran, dass wir bereits Vorlesungen zum Thema Serialisierung hatten. Das ist richtig :) Hier ist die erste und hier die zweite. Wenn Sie sich nicht genau erinnern, wie Serialisierung funktioniert, warum sie benötigt wird und welche Tools es dafür in Java gibt, können Sie diese Vorlesungen überfliegen. Die heutige Vorlesung ist theoretisch und wir werden uns darin näher mit Serialisierungsformaten befassen. Serialisierungsformate in Java - 1Erinnern 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 Rekonstruktion eines Objekts aus diesen Bytes. Ein Java-Objekt kann serialisiert und über ein Netzwerk übertragen werden (z. B. an einen anderen Computer). Dieselbe Bytefolge kann also in verschiedenen Formaten dargestellt werden. Sie kennen das aus dem alltäglichen Computergebrauch. Beispielsweise kann das E-Book (oder ein einfaches Textdokument), das Sie gerade lesen, in verschiedenen Formaten verfasst sein:
  • docx (Microsoft Word-Format);
  • pdf (Adobe-Format);
  • mobi (häufig in Amazon Kindle-Geräten verwendet);
  • und vieles mehr (ePub, djvu, fb2...).
Es scheint, dass die Aufgabe dieselbe ist: den Text in einer für Menschen lesbaren Form darzustellen. Aber die Leute haben eine ganze Reihe von Formaten erfunden. Auch ohne auf die Details ihrer Arbeit einzugehen, können wir davon ausgehen, dass dies aus einem bestimmten Grund geschah. Jeder von ihnen hat wahrscheinlich seine eigenen Vor- und Nachteile im Vergleich zu den anderen. Vielleicht wurden Serialisierungsformate nach dem gleichen Prinzip erstellt? Nun ja, gute Vermutung, Student! :) Wie es ist. Tatsache ist, dass die Übertragung von Daten über eine Entfernung eine ziemlich heikle Angelegenheit ist und viele Faktoren dahinterstecken. Wer übermittelt die Daten? Wo? Welche Lautstärke? Wird die empfangende Partei eine Person oder eine Maschine sein (d. h. sollten die Daten für Menschen lesbar sein)? Welche Art von Gerät liest die Daten? Offensichtlich sind die Situationen unterschiedlich. Es ist eine Sache, wenn Sie ein 500-KB-Bild von einem Smartphone auf ein anderes übertragen müssen. Ganz anders verhält es sich, wenn es um 500 Terabyte Geschäftsdaten geht, die möglichst effizient komprimiert und gleichzeitig schnellstmöglich übertragen werden müssen. Werfen wir einen Blick auf die wichtigsten Serialisierungsformate und schauen wir uns die Vor- und Nachteile jedes einzelnen an!

JSON

JavaScript-Objekt-Notation. Du kennst ihn schon ein wenig! Wir haben in dieser Vorlesung darüber gesprochen und uns hier mit der Serialisierung in JSON befasst . Es hat seinen Namen nicht ohne Grund. In JSON konvertierte Java-Objekte sehen tatsächlich genauso aus wie JavaScript-Objekte. Sie müssen kein JavaScript beherrschen, um die Bedeutung unseres Objekts zu verstehen:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Es ist nicht notwendig, ein Objekt zu übergeben. JSON kann auch ein Array von Objekten enthalten:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Da JSON ein JavaScript-Objekt ist, unterstützt es die folgenden JavaScript-Datenformate:
  • Saiten;
  • Zahlen (Anzahl);
  • Objekte (Objekt);
  • Arrays (Array);
  • boolesche Werte (wahr und falsch);
  • Null.
Welche Vorteile hat JSON?
  1. Für Menschen lesbares Format. Dies ist ein offensichtlicher Vorteil, wenn Ihr Endbenutzer ein Mensch ist. Ihr Server speichert beispielsweise eine Datenbank mit Flugplänen. Ein menschlicher Client fordert mithilfe einer Webanwendung Daten aus dieser Datenbank an, während er zu Hause am Computer sitzt. Da Sie die Daten in einem für ihn verständlichen Format bereitstellen müssen, ist JSON eine großartige Lösung.

  2. Einfachheit. Man könnte sagen, es ist elementar :) Oben haben wir ein Beispiel für zwei JSON-Dateien gegeben. Und selbst wenn Sie noch nie von der Existenz von JavaScript (geschweige denn seinen Objekten) gehört haben, können Sie leicht verstehen, welche Art von Objekten dort beschrieben werden.
    Die gesamte JSON-Dokumentation besteht aus einer Webseite mit einigen Bildern.

  3. Weit verbreitet. JavaScript ist die dominierende Frontend-Sprache und bestimmt ihre Bedingungen. Die Verwendung von JSON ist ein Muss. Daher verwenden zahlreiche Webdienste JSON als Format für den Datenaustausch. Jede moderne IDE unterstützt das JSON-Format (einschließlich Intellij IDEA). Für die Arbeit mit JSON wurde eine Reihe von Bibliotheken für alle möglichen Programmiersprachen geschrieben.

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

YAML

Zu Beginn seiner Existenz stand es für Yet Another Markup Language – „eine andere Auszeichnungssprache“. Damals galt es als Konkurrent von XML. Mittlerweile steht es für „YAML Ain't Markup Language“ („YAML ist keine Auszeichnungssprache“). Wie ist er? Stellen wir uns vor, dass wir drei Charakterklassen für unser Computerspiel erstellen müssen: Krieger, Magier und Dieb. Sie verfügen über die folgenden Eigenschaften: Stärke, Beweglichkeit, Ausdauer und eine Reihe von Waffen. So sieht unsere YAML-Datei mit Klassenbeschreibungen aus:
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
Die YAML-Datei hat eine Baumstruktur: Einige Elemente sind in anderen verschachtelt. Wir können die Verschachtelung steuern, indem wir eine bestimmte Anzahl von Leerzeichen verwenden, um jede Ebene zu kennzeichnen. Welche Vorteile bietet das YAML-Format?
  1. Für Menschen lesbar. Auch wenn Sie eine Yaml-Datei ohne Beschreibung sehen, können Sie leicht verstehen, welche Objekte dort beschrieben werden. YAML gibt an, wie gut für Menschen lesbar ist, dass die Hauptseite von yaml.org eine normale Yaml-Datei ist :)

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

  3. Unterstützung für in Programmiersprachen native Datenstrukturen. Ein großer Vorteil von YAML gegenüber JSON und vielen anderen Formaten besteht darin, dass es unterschiedliche Datenstrukturen unterstützt. Darunter:

    • !!map
      Eine ungeordnete Sammlung von Schlüssel:Wert-Paaren ohne Möglichkeit von Duplikaten;

    • !!omap
      Eine geordnete Folge von Schlüssel-Wert-Paaren ohne Möglichkeit von Duplikaten;

    • !!Paare:
      Eine geordnete Folge von Schlüssel:Wert-Paaren mit der Möglichkeit von Duplikaten;

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

    • !!seq
      Folge beliebiger Werte;

    Einige dieser Strukturen werden Ihnen aus Java bekannt sein! :) Dank dieser Funktion können Sie verschiedene Datenstrukturen aus Programmiersprachen in das YAML-Format serialisieren.

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

    Übersetzung der Wörter „Anker“ und „Alias“ – „Anker“ und „Pseudonym“. Im Prinzip beschreibt es die Essenz dieser Begriffe in YAML ziemlich genau.

    Sie ermöglichen es Ihnen, ein Element in einer Yaml-Datei zu identifizieren und im Rest der Datei darauf zu verweisen, wenn es wiederholt vorkommt. Der Anker wird mit dem Symbol erstellt &und der Alias ​​wird mit erstellt *.

    Nehmen wir an, wir haben eine Datei mit Beschreibungen der Bücher von Leo Tolstoi. Um zu vermeiden, dass wir den Namen des Autors jedes Mal manuell schreiben müssen, erstellen wir einfach einen Anker „leo“ 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 wir diese Datei mit einem Parser lesen, wird der Wert „Leo Tolstoy“ an den richtigen Stellen anstelle unseres Alias ​​eingesetzt.

  5. Sie können Daten in anderen Formaten in YAML 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 dem sogenannten Tag-Tree.
<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 JSON und YAML in nichts nachsteht (wenn wir über die Verwendung in realen Projekten sprechen). Wir haben einen separaten Vortrag über XML .

BSON (binärer JSON)

Wie der Name schon sagt, ist es JSON sehr ähnlich, ist jedoch nicht für Menschen lesbar und arbeitet mit Daten im Binärformat. Dadurch ist das Speichern und Übertragen von Bildern und anderen Anhängen sehr praktisch. Darüber hinaus unterstützt BSON einige Datentypen, die in JSON nicht verfügbar sind. Sie können beispielsweise ein Datum (im Millisekundenformat) oder sogar einen Teil des JavaScript-Codes in eine BSON-Datei schreiben. Die beliebte NoSQL-Datenbank MongoDB speichert Informationen im BSON-Format.

Positionsbasiertes Protokoll

In manchen Situationen müssen wir die übertragene Datenmenge drastisch reduzieren (z. B. wenn viele Daten vorhanden sind und wir die Last reduzieren müssen). In dieser Situation können wir ein positionbasiertes Protokoll verwenden , das heißt, Parameterwerte ohne die Namen der Parameter selbst übergeben.
"Leo Tolstoy" | "Anna Karenina" | 1873
Daten in diesem Format nehmen viel weniger Platz ein als eine vollwertige JSON-Datei. Natürlich gibt es noch andere Serialisierungsformate, aber Sie müssen sie jetzt nicht alle kennen :) Es ist gut, mit den Formaten vertraut zu sein, die heute der Industriestandard für die Anwendungsentwicklung sind, und sich an ihre Vorteile und Unterschiede untereinander zu erinnern . Und unser Vortrag ist zu Ende :) Vergessen Sie nicht, heute ein paar Probleme zu lösen! Wir sehen uns wieder! :) :)
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION