CodeGym/Java-blogg/Tilfeldig/Java-serialiseringsformater
John Squirrels
Nivå
San Francisco

Java-serialiseringsformater

Publisert i gruppen
Hei! La oss snakke om serialisering. Du husker sikkert at vi allerede har hatt leksjoner om serialisering. Og det gjorde vi :) Her er den første Og her er den andre. Hvis du ikke husker godt hvordan serialisering fungerer, hvorfor serialisering er nødvendig, og hvilke verktøy Java har for serialisering, kan du kjøre gjennom disse leksjonene. Dagens leksjon vil handle om teori. Vi skal se nærmere på serialiseringsformater. Først, la oss huske hva serialisering er. Serialisering er prosessen med å lagre tilstanden til et objekt i en sekvens av byte. Deserialisering er prosessen med å gjenopprette et objekt fra disse bytene. Et Java-objekt kan serialiseres og sendes over et nettverk (for eksempel til en annen datamaskin). Sekvensen av byte kan representeres i forskjellige formater. Du er kjent med dette konseptet fra vanlig datamaskinbruk. For eksempel kan en elektronisk bok (eller et enkelt tekstdokument) skrives i en rekke forskjellige formater:
  • docx (Microsoft Word-format);
  • pdf (Adobe-format);
  • mobi (vanligvis brukt på Amazon Kindle-enheter);
  • og mye mer (ePub, djvu, fb2, etc.).
I hvert tilfelle ser målet ut til å være det samme: presentere teksten i en menneskelig lesbar form. Likevel har folk funnet opp mange forskjellige formater. Uten å gå inn på detaljene i arbeidet deres, kan vi anta at de hadde gode grunner. Hvert format har sine egne fordeler og ulemper sammenlignet med resten. Kanskje forskjellige serialiseringsformater ble laget etter de samme prinsippene? Utmerket gjetning, student! :) Det er helt riktig. Realiteten er at det å sende data over en ledning (eller trådløst) er en vanskelig forretning, og det involverer mange faktorer. Hvem sender dataene? Hvor skal du? Hvilket volum? Vil mottakeren være et menneske eller en datamaskin (dvs. bør dataene være lesbare for mennesker)? Hvilken enhet vil lese dataene? Det er klart at disse situasjonene er forskjellige. Det er én ting å sende et bilde på 500 KB fra en smarttelefon til en annen. Og det er en helt annen ting hvis vi snakker om 500 terabyte med forretningsdata som må komprimeres optimalt og sendes så raskt som mulig. La oss bli kjent med de viktigste serialiseringsformatene og vurdere fordelene og ulempene ved hver av dem!

JSON

JavaScript-objektnotasjon. Du vet allerede litt om dette formatet! Vi snakket om det i denne leksjonen , og vi dekket serialisering til JSON her . Den har fått navnet sitt av en grunn. Java-objekter konvertert til JSON ser faktisk akkurat ut som objekter i JavaScript. Du trenger ikke å kunne JavaScript for å forstå objektet vårt:
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Vi er ikke begrenset til å sende et enkelt objekt. JSON-formatet kan også representere en rekke 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 representerer JavaScript-objekter, støtter den følgende JavaScript-dataformater:
  • strenger;
  • tall;
  • gjenstander;
  • matriser;
  • boolsk (sant og usant);
  • null.
Hva er fordelene med JSON?
  1. Menneskelest format. Dette er en åpenbar fordel hvis sluttbrukeren din er menneskelig. Anta for eksempel at serveren din har en database med en tidsplan over flyreiser. En menneskelig kunde som sitter ved datamaskinen hjemme, ber om data fra denne databasen ved hjelp av en nettapplikasjon. Fordi du trenger å gi data i et format som han kan forstå, er JSON en flott løsning.

  2. Enkelhet. Det er superenkelt :) Ovenfor ga vi et eksempel på to JSON-filer. Og selv om du ikke har hørt om JavaScript (for ikke å snakke om JavaScript-objekter), kan du lett forstå hva slags objekter som er beskrevet der.
    Hele JSON-dokumentasjonen består av en nettside med et par bilder.

  3. Utbredt bruk. JavaScript er det dominerende grensesnittspråket, og det har sine egne krav. Å bruke JSON er et must. Derfor bruker et stort antall nettjenester JSON som datautvekslingsformat. Hver moderne IDE støtter JSON-formatet (inkludert IntelliJ IDEA). En haug med biblioteker er skrevet for alle slags programmeringsspråk for å muliggjøre arbeid med JSON.

For eksempel har du allerede jobbet med Jackson-biblioteket i en leksjon der vi lærte å serialisere Java-objekter til JSON. Men foruten Jackson har vi for eksempel GSON , som er et veldig praktisk bibliotek fra Google.

YAML

Opprinnelig sto YAML for "Yet Another Markup Language". Da det begynte, ble det posisjonert som en konkurrent til XML. Nå, med tidens gang, har YAML kommet til å bety "YAML Ain't Markup Language". Hva er det egentlig? La oss forestille oss at vi må lage 3 klasser for å representere karakterer i et dataspill: Warrior, Mage og Thief. De vil ha følgende egenskaper: styrke, smidighet, utholdenhet, et sett med våpen. Slik vil en YAML-fil som beskriver klassene våre se ut:
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 trestruktur: noen elementer er nestet i andre. Vi kan kontrollere hekking ved å bruke et visst antall mellomrom, som vi bruker for å angi hvert nivå. Hva er fordelene med YAML-formatet?
  1. Menneskelig lesbar. Igjen, selv om du ser en YAML-fil uten en beskrivelse, kan du enkelt forstå objektene som den beskriver. YAML er så menneskelig lesbart at nettstedet yaml.org er en vanlig YAML-fil :)

  2. Kompakthet. Filstrukturen lages med mellomrom: det er ikke nødvendig å bruke parenteser eller anførselstegn.

  3. Støtte for innfødte datastrukturer for programmeringsspråk. Den store fordelen med YAML fremfor JSON og mange andre formater er at den støtter ulike datastrukturer. De inkluderer:

    • !!map
      Et uordnet sett med nøkkelverdi-par som ikke kan ha duplikater;

    • !!omap
      En ordnet sekvens av nøkkel-verdi-par som ikke kan ha duplikater;

    • !!par:
      En ordnet sekvens av nøkkelverdi-par som kan ha duplikater;

    • !!sett
      En uordnet sekvens av verdier som ikke er lik hverandre;

    • !!seq
      En sekvens av vilkårlige verdier;

    Du vil kjenne igjen noen av disse strukturene fra Java! :) Dette betyr at ulike datastrukturer fra programmeringsspråk kan serialiseres til YAML.

  4. Evne til å bruke anker og alias

    Disse markørene lar deg identifisere et element i en YAML-fil, og deretter referere til det i resten av filen hvis det oppstår gjentatte ganger. Et anker opprettes ved å bruke symbolet & , og et alias opprettes ved hjelp av * .

    Anta at vi har en fil som beskriver bøker av Leo Tolstoj. For å unngå å skrive ut forfatterens navn for hver bok, lager vi ganske enkelt leo-ankeret og refererer til det ved å bruke et alias når vi trenger 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 filen er analysert, erstattes verdien "Leo Tolstoy" på de riktige stedene der vi har aliasene våre.

  5. YAML kan legge inn 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 formatet er basert på et tag-tre.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Hvert element består av en åpnings- og lukkingskode (<> og </>). Hvert element kan ha nestede elementer. XML er et vanlig format som er like bra som JSON og YAML (hvis vi snakker om ekte prosjekter). Vi har en egen leksjon om XML .

BSON (binær JSON)

Som navnet tilsier, er BSON veldig lik JSON, men det er ikke lesbart for mennesker og bruker binære data. Som et resultat er det veldig bra for lagring og overføring av bilder og andre vedlegg. I tillegg støtter BSON enkelte datatyper som ikke er tilgjengelige i JSON. For eksempel kan en BSON-fil inkludere en dato (i millisekundformat) eller til og med et stykke JavaScript-kode. Den populære MongoDB NoSQL-databasen lagrer informasjon i BSON-format.

Posisjonsbasert protokoll

I noen situasjoner må vi drastisk redusere mengden data som sendes (for eksempel hvis vi har mye data og trenger å redusere belastningen). I denne situasjonen kan vi bruke den posisjonsbaserte protokollen, det vil si sende parameterverdier uten navnene på selve parameterne.
"Leo Tolstoy" | "Anna Karenina" | 1873
Data i dette formatet tar flere ganger mindre plass enn en full JSON-fil. Selvfølgelig finnes det andre serialiseringsformater, men du trenger ikke å kjenne alle akkurat nå :) Det er bra om du er kjent med gjeldende industristandardformater når du utvikler applikasjoner, og husker fordelene deres og hvordan de skiller seg fra én. en annen. Og med dette går leksjonen vår mot slutten :) Ikke glem å løse et par oppgaver i dag! Til neste gang! :)
Kommentarer
  • Populær
  • Ny
  • Gammel
Du må være pålogget for å legge igjen en kommentar
Denne siden har ingen kommentarer ennå