CodeGym /Blog Java /Aleatoriu /Formate de serializare Java
John Squirrels
Nivel
San Francisco

Formate de serializare Java

Publicat în grup
Bună! Să vorbim despre serializare. Probabil vă amintiți că am avut deja lecții despre serializare. Și așa am făcut :) Iată primul Și iată al doilea. Dacă nu vă amintiți bine cum funcționează serializarea, de ce este necesară serializarea și ce instrumente are Java pentru serializare, puteți parcurge aceste lecții. Lecția de astăzi va fi despre teorie. Vom arunca o privire mai atentă asupra formatelor de serializare. În primul rând, să ne amintim ce este serializarea. Serializarea este procesul de stocare a stării unui obiect într-o secvență de octeți. Deserializarea este procesul de restaurare a unui obiect din acești octeți. Un obiect Java poate fi serializat și trimis printr-o rețea (de exemplu, către un alt computer). Secvența de octeți poate fi reprezentată în diferite formate. Sunteți familiarizat cu acest concept de la utilizarea obișnuită a computerului. De exemplu, o carte electronică (sau un simplu document text) poate fi scrisă într-o mulțime de formate diferite:
  • docx (format Microsoft Word);
  • pdf (format Adobe);
  • mobi (utilizat în mod obișnuit pe dispozitivele Amazon Kindle);
  • și multe altele (ePub, djvu, fb2 etc.).
În fiecare caz, obiectivul pare să fie același: prezentați textul într-o formă care poate fi citită de om. Totuși, oamenii au inventat o mulțime de formate diferite. Fără a intra în detaliile muncii lor, putem presupune că au avut motive întemeiate. Fiecare format are propriile sale avantaje și dezavantaje în comparație cu restul. Poate că au fost create diverse formate de serializare urmând aceleași principii? O presupunere excelentă, studente! :) Exact asa. Realitatea este că trimiterea datelor printr-un fir (sau wireless) este o afacere dificilă și implică mulți factori. Cine trimite datele? Unde sa? Ce volum? Destinatarul va fi un om sau un computer (adică datele ar trebui să fie citite de om)? Ce dispozitiv va citi datele? Evident, aceste situații sunt diferite. Un lucru este să trimiți o imagine de 500 KB de la un smartphone la altul. Și este cu totul altceva dacă vorbim de 500 de terabytes de date de afaceri care trebuie să fie comprimate optim și trimise cât mai repede posibil. Să facem cunoștință cu principalele formate de serializare și să luăm în considerare avantajele și dezavantajele fiecăruia dintre ele!

JSON

Notarea obiectelor JavaScript. Știți deja puțin despre acest format! Am vorbit despre asta în această lecție și am acoperit serializarea în JSON chiar aici . Și-a primit numele dintr-un motiv. Obiectele Java convertite în JSON arată de fapt exact ca obiectele din JavaScript. Nu trebuie să cunoașteți JavaScript pentru a înțelege obiectul nostru:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Nu ne limităm la trimiterea unui singur obiect. Formatul JSON poate reprezenta, de asemenea, o matrice de obiecte:

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

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Deoarece JSON reprezintă obiecte JavaScript, acceptă următoarele formate de date JavaScript:
  • siruri de caractere;
  • numere;
  • obiecte;
  • matrice;
  • boolean (adevărat și fals);
  • nul.
Care sunt beneficiile JSON?
  1. Format care poate fi citit de om. Acesta este un avantaj evident dacă utilizatorul final este un om. De exemplu, să presupunem că serverul dvs. are o bază de date cu un program de zboruri. Un client uman, care stă la computerul său acasă, solicită date din această bază de date folosind o aplicație web. Deoarece trebuie să furnizați date într-un format pe care el îl poate înțelege, JSON este o soluție excelentă.

  2. Simplitate. Este super simplu :) Mai sus, am dat un exemplu de două fișiere JSON. Și chiar dacă nu ați auzit despre JavaScript (darămite obiecte JavaScript), puteți înțelege cu ușurință tipul de obiecte descrise acolo.
    Întreaga documentație JSON constă într-o pagină web cu câteva imagini.

  3. Utilizare pe scară largă. JavaScript este limbajul front-end dominant și are propriile cerințe. Utilizarea JSON este o necesitate. Prin urmare, un număr mare de servicii web folosesc JSON ca format de schimb de date. Fiecare IDE modern acceptă formatul JSON (inclusiv IntelliJ IDEA). Au fost scrise o grămadă de biblioteci pentru tot felul de limbaje de programare pentru a permite lucrul cu JSON.

De exemplu, ați lucrat deja cu biblioteca Jackson într-o lecție în care am învățat să serializeze obiecte Java în JSON. Dar, pe lângă Jackson, avem, de exemplu, GSON , care este o bibliotecă foarte convenabilă de la Google.

YAML

Inițial, YAML a reprezentat „Yet Another Markup Language”. Când a început, a fost poziționat ca un concurent pentru XML. Acum, odată cu trecerea timpului, YAML a ajuns să însemne „YAML Ain’t Markup Language”. Ce este mai exact? Să ne imaginăm că trebuie să creăm 3 clase pentru a reprezenta personaje într-un joc pe computer: Războinic, Mag și Hoț. Vor avea următoarele caracteristici: forță, agilitate, rezistență, un set de arme. Iată cum ar arăta un fișier YAML care descrie clasele noastre:

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 fișier YAML are o structură arborescentă: unele elemente sunt imbricate în altele. Putem controla imbricarea folosind un anumit număr de spații, pe care le folosim pentru a desemna fiecare nivel. Care sunt avantajele formatului YAML?
  1. Lizibil de om. Din nou, chiar și văzând un fișier YAML fără o descriere, puteți înțelege cu ușurință obiectele pe care le descrie. YAML este atât de ușor de citit, încât site-ul web yaml.org este un fișier YAML obișnuit :)

  2. Compactitate. Structura fișierului este creată folosind spații: nu este nevoie să folosiți paranteze sau ghilimele.

  3. Suport pentru structuri de date native pentru limbaje de programare. Uriașul avantaj al YAML față de JSON și multe alte formate este că acceptă diferite structuri de date. Ei includ:

    • !!map
      Un set neordonat de perechi cheie-valoare care nu pot avea duplicate;

    • !!omap
      O secvență ordonată de perechi cheie-valoare care nu poate avea duplicate;

    • !!perechi:
      O secvență ordonată de perechi cheie-valoare care pot avea duplicate;

    • !!set
      O secvență neordonată de valori care nu sunt egale între ele;

    • !!seq
      O succesiune de valori arbitrare;

    Veți recunoaște unele dintre aceste structuri din Java! :) Aceasta înseamnă că diferite structuri de date din limbaje de programare pot fi serializate în YAML.

  4. Abilitatea de a utiliza ancora și alias

    Acești marcatori vă permit să identificați un element dintr-un fișier YAML și apoi să faceți referire la el în restul fișierului dacă apare în mod repetat. O ancoră este creată folosind simbolul & și un alias este creat folosind * .

    Să presupunem că avem un fișier care descrie cărți de Lev Tolstoi. Pentru a evita să scriem numele autorului pentru fiecare carte, pur și simplu creăm ancora leu și ne referim la ea folosind un alias atunci când avem nevoie de ea:

    
    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
    

    Când acest fișier este analizat, valoarea „Lev Tolstoi” este înlocuită în locurile potrivite unde avem aliasurile noastre.

  5. YAML poate încorpora date în alte formate. De exemplu, 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
            }
          ]
    

Alte formate de serializare

XML

Acest format se bazează pe un arbore de etichete.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Fiecare element constă dintr-o etichetă de deschidere și de închidere (<> și </>). Fiecare element poate avea elemente imbricate. XML este un format comun care este la fel de bun ca JSON și YAML (dacă vorbim de proiecte reale). Avem o lecție separată despre XML .

BSON (JSON binar)

După cum sugerează și numele, BSON este foarte asemănător cu JSON, dar nu poate fi citit de om și utilizează date binare. Drept urmare, este foarte bun pentru stocarea și transferul de imagini și alte atașamente. În plus, BSON acceptă unele tipuri de date care nu sunt disponibile în JSON. De exemplu, un fișier BSON poate include o dată (în format de milisecunde) sau chiar o bucată de cod JavaScript. Populara bază de date MongoDB NoSQL stochează informații în format BSON.

Protocol bazat pe poziție

În unele situații, trebuie să reducem drastic cantitatea de date trimise (de exemplu, dacă avem multe date și trebuie să reducem încărcarea). În această situație, putem folosi protocolul bazat pe poziție, adică trimitem valorile parametrilor fără numele parametrilor înșiși.

"Leo Tolstoy" | "Anna Karenina" | 1873
Datele în acest format ocupă de câteva ori mai puțin spațiu decât un fișier JSON complet. Desigur, există și alte formate de serializare, dar nu trebuie să le cunoașteți pe toate chiar acum :) Este bine dacă sunteți familiarizat cu formatele standard actuale ale industriei atunci când dezvoltați aplicații și vă amintiți avantajele și modul în care diferă de unul. o alta. Și cu aceasta, lecția noastră se încheie :) Nu uitați să rezolvați câteva sarcini astăzi! Pana data viitoare! :)
Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION