CodeGym/Java blog/Véletlen/Java szerializációs formátumok
John Squirrels
Szint
San Francisco

Java szerializációs formátumok

Megjelent a csoportban
Szia! Beszéljünk a szerializálásról. Valószínűleg emlékszel arra, hogy már volt leckénk a sorozatkészítésről. És így is tettünk :) Itt az első És itt a második. Ha nem emlékszik jól, hogyan működik a szerializálás, miért van szükség a szerializálásra, és milyen eszközökkel rendelkezik a Java a szerializáláshoz, végigfuthatja ezeket a leckéket. A mai óra az elméletről fog szólni. Közelebbről megvizsgáljuk a szerializációs formátumokat. Először is emlékezzünk vissza, mi az a sorozatosítás. A szerializálás egy objektum állapotának bájtok sorozatában történő tárolásának folyamata. A deszerializálás egy objektum visszaállításának folyamata ezekből a bájtokból. A Java objektumok sorba rendezhetők és hálózaton keresztül elküldhetők (például egy másik számítógépre). A bájtok sorozata különböző formátumokban ábrázolható. Ezt a koncepciót a szokásos számítógép-használatból ismeri. Például egy elektronikus könyv (vagy egy egyszerű szöveges dokumentum) többféle formátumban írható:
  • docx (Microsoft Word formátum);
  • pdf (Adobe formátum);
  • mobi (általánosan használt Amazon Kindle eszközökön);
  • és még sok más (ePub, djvu, fb2 stb.).
A cél minden esetben ugyanaz: a szöveget ember által olvasható formában mutassa be. Ennek ellenére az emberek rengeteg különféle formátumot találtak ki. Anélkül, hogy belemennénk munkájuk részleteibe, feltételezhetjük, hogy jó okuk volt. Mindegyik formátumnak megvannak a maga előnyei és hátrányai a többihez képest. Lehet, hogy különféle szerializációs formátumokat hoztak létre ugyanezen elvek alapján? Remek tipp, diák! :) Pontosan így van. A valóság az, hogy az adatok vezetékes (vagy vezeték nélküli) küldése trükkös üzlet, és számos tényezőt érint. Ki küldi az adatokat? Hova? Milyen hangerővel? Ember vagy számítógép lesz a címzett (vagyis az adatoknak ember által olvashatónak kell lenniük)? Milyen eszköz olvassa be az adatokat? Nyilvánvalóan ezek a helyzetek mások. Egy dolog 500 KB-os képet küldeni egyik okostelefonról a másikra. És egészen más a helyzet, ha 500 terabájtnyi üzleti adatról beszélünk, amelyet optimálisan tömöríteni és a lehető leggyorsabban el kell küldeni. Ismerkedjünk meg a fő szerializációs formátumokkal, és mérlegeljük mindegyik előnyeit és hátrányait!

JSON

JavaScript objektum jelölés. Már ismersz egy kicsit erről a formátumról! Ebben a leckében beszéltünk róla , és itt foglalkoztunk a JSON-ba való szerializálással . Okkal kapta a nevét. A JSON-ba konvertált Java objektumok valójában pontosan úgy néznek ki, mint a JavaScript objektumai. Nem kell ismerned a JavaScriptet ahhoz, hogy megértsd az objektumunkat:
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Nem korlátozódunk egyetlen objektum elküldésére. A JSON formátum objektumok tömbjét is képviselheti:
[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Mivel a JSON JavaScript objektumokat képvisel, a következő JavaScript adatformátumokat támogatja:
  • húrok;
  • számok;
  • tárgyak;
  • tömbök;
  • logikai értékek (igaz és hamis);
  • nulla.
Mik a JSON előnyei?
  1. Ember által olvasható formátum. Ez nyilvánvaló előny, ha a végfelhasználó ember. Tegyük fel például, hogy a szervere rendelkezik egy adatbázissal a járatok menetrendjével. Egy emberi ügyfél otthon a számítógépe előtt ülve kér adatokat ebből az adatbázisból egy webes alkalmazás segítségével. Mivel olyan formátumban kell megadnia az adatokat, amelyet ő is megért, a JSON nagyszerű megoldás.

  2. Egyszerűség. Szuper egyszerű :) Fentebb példát mutattunk két JSON fájlra. És még ha nem is hallott a JavaScriptről (nem beszélve a JavaScript objektumokról), könnyen megértheti az ott leírt objektumokat.
    Az egész JSON-dokumentáció egy weboldalból áll, néhány képpel.

  3. Széleskörű használat. A JavaScript a domináns front-end nyelv, és megvannak a maga követelményei. A JSON használata kötelező. Ezért rengeteg webszolgáltatás használja a JSON-t adatcsere-formátumként. Minden modern IDE támogatja a JSON formátumot (beleértve az IntelliJ IDEA-t is). Egy csomó könyvtárat írtak mindenféle programozási nyelvhez, hogy lehetővé tegyék a JSON-nal való munkát.

Például már dolgozott a Jackson-könyvtárral egy leckében, ahol megtanultuk Java objektumokat JSON-ba szerializálni. De Jackson mellett van például GSON , amely egy nagyon kényelmes könyvtár a Google-tól.

YAML

Kezdetben a YAML a "Yet Another Markup Language" rövidítése. Amikor elkezdődött, az XML versenytársa volt. Most, az idő múlásával a YAML azt jelenti, hogy "YAML nem jelölőnyelv". Mi ez pontosan? Képzeljük el, hogy 3 osztályt kell létrehoznunk a karakterek ábrázolásához egy számítógépes játékban: Warrior, Mage és Thief. A következő tulajdonságokkal rendelkeznek: erő, mozgékonyság, állóképesség, fegyverkészlet. Így nézne ki az osztályainkat leíró YAML fájl:
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
A YAML-fájlnak fa szerkezete van: egyes elemek másokba vannak beágyazva. A beágyazást bizonyos számú szóköz használatával szabályozhatjuk, amelyet az egyes szintek jelölésére használunk. Mik a YAML formátum előnyei?
  1. Ember által olvasható. Ismétlem, még ha leírás nélküli YAML-fájlt is lát, könnyen megértheti az általa leírt objektumokat. A YAML annyira ember számára olvasható, hogy a yaml.org webhely egy közönséges YAML fájl :)

  2. Kompaktság. A fájlszerkezet szóközökkel készül: nincs szükség zárójelek vagy idézőjelek használatára.

  3. Natív adatstruktúrák támogatása programozási nyelvekhez. A YAML hatalmas előnye a JSON-nal és sok más formátummal szemben, hogy különféle adatstruktúrákat támogat. Tartalmazzák:

    • !!map
      Kulcs-érték párok rendezetlen halmaza, amelyeknek nem lehetnek ismétlődései;

    • !!omap
      Kulcs-érték párok rendezett sorozata, amelyeknek nem lehetnek ismétlődései;

    • !!pairs:
      Kulcs-érték párok rendezett sorozata, amelyeknek ismétlődései lehetnek;

    • !!set
      Egymással nem egyenlő értékek rendezetlen sorozata;

    • !!seq
      Tetszőleges értékek sorozata;

    Néhány ilyen szerkezetet felismer a Java-ból! :) Ez azt jelenti, hogy a programozási nyelvekből származó különféle adatstruktúrák sorosíthatók YAML-be.

  4. Horgony és álnév használatának képessége

    Ezek a jelölők lehetővé teszik, hogy azonosítson bizonyos elemeket a YAML-fájlban, majd hivatkozzon rá a fájl többi részében, ha ismétlődően előfordul. A horgony a & szimbólummal , az álnév pedig a * jellel jön létre .

    Tegyük fel, hogy van egy fájlunk, amely Lev Tolsztoj könyveit írja le. Annak érdekében, hogy ne írjuk ki a szerző nevét az egyes könyvekhez, egyszerűen létrehozzuk a leo horgonyt, és szükség esetén álnévvel hivatkozunk rá:

    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

    A fájl elemzésekor a „Leo Tolsztoj” érték behelyettesítésre kerül a megfelelő helyeken, ahol az álneveink vannak.

  5. A YAML más formátumokba is beágyazhat adatokat. Például 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
            }
          ]

Egyéb szerializációs formátumok

XML

Ez a formátum egy címkefán alapul.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Minden elem egy nyitó és záró címkéből (<> és </>) áll. Minden elemnek lehetnek beágyazott elemei. Az XML egy elterjedt formátum, amely ugyanolyan jó, mint a JSON és a YAML (ha valódi projektekről beszélünk). Van egy külön leckénk az XML-ről .

BSON (bináris JSON)

Ahogy a neve is sugallja, a BSON nagyon hasonlít a JSON-hoz, de ember számára nem olvasható, és bináris adatokat használ. Ennek köszönhetően nagyon jó képek és egyéb mellékletek tárolására, átvitelére. Ezenkívül a BSON támogat néhány olyan adattípust, amelyek nem állnak rendelkezésre a JSON-ban. Például egy BSON-fájl tartalmazhat dátumot (ezredmásodperces formátumban), vagy akár JavaScript-kódot is. A népszerű MongoDB NoSQL adatbázis BSON formátumban tárolja az információkat.

Pozíció alapú protokoll

Bizonyos helyzetekben drasztikusan csökkentenünk kell az elküldött adatok mennyiségét (például ha sok adatunk van, és csökkenteni kell a terhelést). Ebben a helyzetben használhatjuk a pozícióalapú protokollt, azaz paraméterértékeket küldhetünk maguknak a paramétereknek a neve nélkül.
"Leo Tolstoy" | "Anna Karenina" | 1873
Az ilyen formátumú adatok többször kevesebb helyet foglalnak el, mint egy teljes JSON-fájl. Persze vannak más szerializációs formátumok is, de nem kell most mindegyiket ismerned :) Jó, ha az alkalmazások fejlesztése során ismered az aktuális iparági szabványos formátumokat, és emlékszel azok előnyeire, illetve arra, hogy miben különböznek az egyiktől egy másik. És ezzel a leckénk is véget ér :) Ma ne felejts el megoldani pár feladatot! A következő alkalomig! :)
Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései