CodeGym /Java blog /Tilfældig /Java serialiseringsformater
John Squirrels
Niveau
San Francisco

Java serialiseringsformater

Udgivet i gruppen
Hej! Lad os tale om serialisering. Du husker sikkert, at vi allerede har haft lektioner om serialisering. Og det gjorde vi :) Her er den første Og her er den anden. Hvis du ikke husker godt, hvordan serialisering fungerer, hvorfor serialisering er nødvendig, og hvilke værktøjer Java har til serialisering, kan du køre disse lektioner igennem. Dagens lektion vil handle om teori. Vi vil se nærmere på serialiseringsformater. Lad os først huske, hvad serialisering er. Serialisering er processen med at lagre et objekts tilstand i en sekvens af bytes. Deserialisering er processen med at gendanne et objekt fra disse bytes. Et Java-objekt kan serialiseres og sendes over et netværk (f.eks. til en anden computer). Rækkefølgen af ​​bytes kan repræsenteres i forskellige formater. Du kender dette koncept fra almindelig computerbrug. For eksempel kan en elektronisk bog (eller et simpelt tekstdokument) skrives i en masse forskellige formater:
  • docx (Microsoft Word-format);
  • pdf (Adobe-format);
  • mobi (almindeligvis brugt på Amazon Kindle-enheder);
  • og meget mere (ePub, djvu, fb2 osv.).
I hvert tilfælde synes formålet at være det samme: præsentere teksten i en menneskelig læsbar form. Alligevel har folk opfundet en masse forskellige formater. Uden at gå i detaljer med deres arbejde, kan vi antage, at de havde gode grunde. Hvert format har sine egne fordele og ulemper i forhold til resten. Måske blev der oprettet forskellige serialiseringsformater efter de samme principper? Fremragende gæt, studerende! :) Det er helt rigtigt. Virkeligheden er, at det er en vanskelig forretning at sende data over en ledning (eller trådløst), og det involverer mange faktorer. Hvem sender dataene? Hvorhen? Hvilken volumen? Vil modtageren være et menneske eller en computer (dvs. skal dataene kunne læses af mennesker)? Hvilken enhed læser dataene? Det er klart, at disse situationer er forskellige. Én ting er at sende et 500 KB billede fra en smartphone til en anden. Og det er en helt anden ting, hvis vi taler om 500 terabyte forretningsdata, der skal komprimeres optimalt og sendes så hurtigt som muligt. Lad os stifte bekendtskab med de vigtigste serialiseringsformater og overveje fordelene og ulemperne ved hver af dem!

JSON

JavaScript-objektnotation. Du ved allerede lidt om dette format! Vi talte om det i denne lektion , og vi dækkede serialisering til JSON lige her . Det har fået sit navn af en grund. Java-objekter konverteret til JSON ligner faktisk objekter i JavaScript. Du behøver ikke at kende JavaScript for at forstå vores objekt:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Vi er ikke begrænset til at sende et enkelt objekt. JSON-formatet kan også repræsentere en række objekter:

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

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Fordi JSON repræsenterer JavaScript-objekter, understøtter den følgende JavaScript-dataformater:
  • strenge;
  • tal;
  • genstande;
  • arrays;
  • booleaner (sandt og falsk);
  • nul.
Hvad er fordelene ved JSON?
  1. Menneskelæsbart format. Dette er en åbenlys fordel, hvis din slutbruger er et menneske. Antag for eksempel, at din server har en database med en flyveplan. En menneskelig kunde, der sidder ved sin computer derhjemme, anmoder om data fra denne database ved hjælp af en webapplikation. Fordi du skal levere data i et format, som han kan forstå, er JSON en fantastisk løsning.

  2. Enkelhed. Det er super simpelt :) Ovenfor gav vi et eksempel på to JSON-filer. Og selvom du ikke har hørt om JavaScript (endsige JavaScript-objekter), kan du nemt forstå den slags objekter, der er beskrevet der.
    Hele JSON-dokumentationen består af en webside med et par billeder.

  3. Udbredt brug. JavaScript er det dominerende frontend-sprog, og det har sine egne krav. Brug af JSON er et must. Derfor bruger et stort antal webtjenester JSON som dataudvekslingsformat. Alle moderne IDE understøtter JSON-formatet (inklusive IntelliJ IDEA). En masse biblioteker er blevet skrevet til alle mulige programmeringssprog for at gøre det muligt at arbejde med JSON.

For eksempel har du allerede arbejdet med Jackson-biblioteket i en lektion, hvor vi lærte at serialisere Java-objekter til JSON. Men udover Jackson har vi for eksempel GSON , som er et meget praktisk bibliotek fra Google.

YAML

Oprindeligt stod YAML for "Yet Another Markup Language". Da det begyndte, var det positioneret som en konkurrent til XML. Nu, med tidens gang, er YAML kommet til at betyde "YAML Ain't Markup Language". Hvad er det helt præcist? Lad os forestille os, at vi skal oprette 3 klasser for at repræsentere karakterer i et computerspil: Warrior, Mage og Thief. De vil have følgende egenskaber: styrke, smidighed, udholdenhed, et sæt våben. Sådan vil en YAML-fil, der beskriver vores klasser, se ud:

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
En YAML-fil har en træstruktur: nogle elementer er indlejret i andre. Vi kan styre indlejring ved hjælp af et bestemt antal mellemrum, som vi bruger til at angive hvert niveau. Hvad er fordelene ved YAML-formatet?
  1. Menneskelæselig. Igen, selv om du ser en YAML-fil uden en beskrivelse, kan du nemt forstå de objekter, den beskriver. YAML er så menneskelig læsbar, at hjemmesiden yaml.org er en almindelig YAML-fil :)

  2. Kompakthed. Filstrukturen oprettes ved hjælp af mellemrum: der er ingen grund til at bruge parenteser eller anførselstegn.

  3. Understøttelse af native datastrukturer til programmeringssprog. Den store fordel ved YAML i forhold til JSON og mange andre formater er, at det understøtter forskellige datastrukturer. De omfatter:

    • !!map
      Et uordnet sæt nøgleværdi-par, der ikke kan have dubletter;

    • !!omap
      En ordnet sekvens af nøgleværdi-par, der ikke kan have dubletter;

    • !!par:
      En ordnet sekvens af nøgle-værdi-par, der kan have dubletter;

    • !!set
      En uordnet række af værdier, der ikke er ens med hinanden;

    • !!seq
      En sekvens af vilkårlige værdier;

    Du vil genkende nogle af disse strukturer fra Java! :) Det betyder, at forskellige datastrukturer fra programmeringssprog kan serialiseres til YAML.

  4. Evne til at bruge anker og alias

    Disse markører giver dig mulighed for at identificere et eller andet element i en YAML-fil og derefter henvise til det i resten af ​​filen, hvis det forekommer gentagne gange. Et anker oprettes ved hjælp af symbolet & , og et alias oprettes ved hjælp af * .

    Antag, at vi har en fil, der beskriver bøger af Leo Tolstoj. For at undgå at skrive forfatterens navn ud for hver bog, opretter vi blot leo-ankeret og henviser til det ved hjælp af et alias, når vi har brug for det:

    
    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
    

    Når denne fil parses, erstattes værdien "Leo Tolstoy" de rigtige steder, hvor vi har vores aliaser.

  5. YAML kan indlejre data i andre formater. For eksempel, 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
            }
          ]
    

Andre serialiseringsformater

XML

Dette format er baseret på et tag-træ.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Hvert element består af et åbnings- og lukketag (<> og </>). Hvert element kan have indlejrede elementer. XML er et almindeligt format, der er lige så godt som JSON og YAML (hvis vi taler om rigtige projekter). Vi har en separat lektion om XML .

BSON (binær JSON)

Som navnet antyder, ligner BSON meget JSON, men det er ikke læseligt for mennesker og bruger binære data. Som et resultat er det meget godt til lagring og overførsel af billeder og andre vedhæftede filer. Derudover understøtter BSON nogle datatyper, der ikke er tilgængelige i JSON. For eksempel kan en BSON-fil indeholde en dato (i millisekundformat) eller endda et stykke JavaScript-kode. Den populære MongoDB NoSQL-database gemmer information i BSON-format.

Positionsbaseret protokol

I nogle situationer er vi nødt til at reducere mængden af ​​sendt data drastisk (f.eks. hvis vi har mange data og skal reducere belastningen). I denne situation kan vi bruge den positionsbaserede protokol, det vil sige at sende parameterværdier uden selve parametrenes navne.

"Leo Tolstoy" | "Anna Karenina" | 1873
Data i dette format tager flere gange mindre plads end en fuld JSON-fil. Selvfølgelig er der andre serialiseringsformater, men du behøver ikke kende dem alle lige nu :) Det er godt, hvis du er bekendt med de nuværende industristandardformater, når du udvikler applikationer, og husker deres fordele, og hvordan de adskiller sig fra én en anden. Og med dette slutter vores lektion :) Glem ikke at løse et par opgaver i dag! Indtil næste gang! :)
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION