CodeGym/Java blogg/Slumpmässig/Java serialiseringsformat
John Squirrels
Nivå
San Francisco

Java serialiseringsformat

Publicerad i gruppen
Hej! Låt oss prata om serialisering. Du kommer säkert ihåg att vi redan har haft lektioner om serialisering. Och så gjorde vi :) Här är den första Och här är den andra. Om du inte minns väl hur serialisering fungerar, varför serialisering behövs och vilka verktyg Java har för serialisering, kan du köra igenom dessa lektioner. Dagens lektion kommer att handla om teori. Vi kommer att titta närmare på serialiseringsformat. Låt oss först komma ihåg vad serialisering är. Serialisering är processen att lagra ett objekts tillstånd i en sekvens av byte. Deserialisering är processen att återställa ett objekt från dessa bytes. Ett Java-objekt kan serialiseras och skickas över ett nätverk (till exempel till en annan dator). Sekvensen av byte kan representeras i olika format. Du är bekant med detta koncept från vanlig datoranvändning. Till exempel kan en elektronisk bok (eller ett enkelt textdokument) skrivas i en massa olika format:
  • docx (Microsoft Word-format);
  • pdf (Adobe-format);
  • mobi (används vanligtvis på Amazon Kindle-enheter);
  • och mycket mer (ePub, djvu, fb2, etc.).
I varje enskilt fall verkar målet vara detsamma: presentera texten i en läsbar form. Ändå har folk uppfunnit många olika format. Utan att gå in på detaljerna i deras arbete kan vi anta att de hade goda skäl. Varje format har sina egna fördelar och nackdelar jämfört med resten. Kanske skapades olika serialiseringsformat enligt samma principer? Utmärkt gissning, student! :) Det är helt rätt. Verkligheten är att det är knepigt att skicka data över en tråd (eller trådlöst) och det involverar många faktorer. Vem skickar uppgifterna? Vart? Vilken volym? Kommer mottagaren att vara en människa eller en dator (dvs. ska uppgifterna vara läsbara för människor)? Vilken enhet kommer att läsa data? Uppenbarligen är dessa situationer olika. Det är en sak att skicka en 500 KB-bild från en smartphone till en annan. Och det är en helt annan sak om vi pratar om 500 terabyte affärsdata som måste komprimeras optimalt och skickas så snabbt som möjligt. Låt oss bekanta oss med de viktigaste serialiseringsformaten och överväga fördelarna och nackdelarna med var och en av dem!

JSON

JavaScript-objektnotation. Du vet redan lite om detta format! Vi pratade om det i den här lektionen och vi behandlade serialisering till JSON här . Den fick sitt namn av en anledning. Java-objekt som konverterats till JSON ser faktiskt ut precis som objekt i JavaScript. Du behöver inte kunna JavaScript för att förstå vårt objekt:
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Vi är inte begränsade till att skicka ett enda objekt. JSON-formatet kan också representera en array av objekt:
[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Eftersom JSON representerar JavaScript-objekt, stöder den följande JavaScript-dataformat:
  • strängar;
  • tal;
  • föremål;
  • matriser;
  • booleaner (sant och falskt);
  • null.
Vilka är fördelarna med JSON?
  1. Människoläsbart format. Detta är en uppenbar fördel om din slutanvändare är mänsklig. Anta till exempel att din server har en databas med ett schema över flygningar. En mänsklig kund, som sitter vid sin dator hemma, begär data från denna databas med hjälp av en webbapplikation. Eftersom du behöver tillhandahålla data i ett format som han kan förstå är JSON en utmärkt lösning.

  2. Enkelhet. Det är superenkelt :) Ovan gav vi ett exempel på två JSON-filer. Och även om du inte har hört talas om JavaScript (för att inte tala om JavaScript-objekt), kan du lätt förstå den typ av objekt som beskrivs där.
    Hela JSON-dokumentationen består av en webbsida med ett par bilder.

  3. Utbredd användning. JavaScript är det dominerande gränssnittsspråket och det har sina egna krav. Att använda JSON är ett måste. Därför använder ett stort antal webbtjänster JSON som datautbytesformat. Alla moderna IDE stöder JSON-formatet (inklusive IntelliJ IDEA). Ett gäng bibliotek har skrivits för alla möjliga programmeringsspråk för att kunna arbeta med JSON.

Du har till exempel redan arbetat med Jackson-biblioteket i en lektion där vi lärde oss att serialisera Java-objekt till JSON. Men förutom Jackson har vi till exempel GSON , som är ett väldigt bekvämt bibliotek från Google.

YAML

Från början stod YAML för "Yet Another Markup Language". När det började var det positionerat som en konkurrent till XML. Nu, med tidens gång, har YAML kommit att betyda "YAML Ain't Markup Language". Vad är det exakt? Låt oss föreställa oss att vi måste skapa 3 klasser för att representera karaktärer i ett datorspel: Warrior, Mage och Thief. De kommer att ha följande egenskaper: styrka, smidighet, uthållighet, en uppsättning vapen. Så här skulle en YAML-fil som beskriver våra klasser 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 trädstruktur: vissa element är kapslade i andra. Vi kan styra kapsling med ett visst antal mellanslag, som vi använder för att beteckna varje nivå. Vilka är fördelarna med YAML-formatet?
  1. Människoläsbar. Återigen, även om du ser en YAML-fil utan en beskrivning, kan du enkelt förstå objekten som den beskriver. YAML är så mänskligt läsbar att webbplatsen yaml.org är en vanlig YAML-fil :)

  2. Kompakthet. Filstrukturen skapas med blanksteg: det finns inget behov av att använda parenteser eller citattecken.

  3. Stöd för inbyggda datastrukturer för programmeringsspråk. Den stora fördelen med YAML framför JSON och många andra format är att den stöder olika datastrukturer. De inkluderar:

    • !!map
      En oordnad uppsättning nyckel-värdepar som inte kan ha dubbletter;

    • !!omap
      En ordnad sekvens av nyckel-värdepar som inte kan ha dubbletter;

    • !!par:
      En ordnad sekvens av nyckel-värdepar som kan ha dubbletter;

    • !!set
      En oordnad sekvens av värden som inte är lika med varandra;

    • !!seq
      En sekvens av godtyckliga värden;

    Du kommer att känna igen några av dessa strukturer från Java! :) Detta innebär att olika datastrukturer från programmeringsspråk kan serialiseras till YAML.

  4. Möjlighet att använda ankare och alias

    Dessa markörer låter dig identifiera något element i en YAML-fil och sedan referera till det i resten av filen om det inträffar upprepade gånger. Ett ankare skapas med hjälp av symbolen & , och ett alias skapas med * .

    Anta att vi har en fil som beskriver böcker av Leo Tolstoj. För att undvika att skriva ut författarens namn för varje bok skapar vi helt enkelt leo-ankaret och hänvisar till det med ett alias när vi behöver 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 denna fil tolkas, ersätts värdet "Leo Tolstoy" på rätt ställen där vi har våra alias.

  5. YAML kan bädda in data i andra format. Till exempel, 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
            }
          ]

Andra serialiseringsformat

XML

Detta format är baserat på ett taggträd.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Varje element består av en öppnings- och stängningstagg (<> och </>). Varje element kan ha kapslade element. XML är ett vanligt format som är lika bra som JSON och YAML (om vi pratar om riktiga projekt). Vi har en separat lektion om XML .

BSON (binär JSON)

Som namnet antyder är BSON väldigt lik JSON, men den är inte läsbar för människor och använder binär data. Som ett resultat är det mycket bra för att lagra och överföra bilder och andra bilagor. Dessutom stöder BSON vissa datatyper som inte är tillgängliga i JSON. Till exempel kan en BSON-fil innehålla ett datum (i millisekundsformat) eller till och med en bit JavaScript-kod. Den populära MongoDB NoSQL-databasen lagrar information i BSON-format.

Positionsbaserat protokoll

I vissa situationer behöver vi drastiskt minska mängden data som skickas (till exempel om vi har mycket data och behöver minska belastningen). I den här situationen kan vi använda det positionsbaserade protokollet, det vill säga skicka parametervärden utan namnen på själva parametrarna.
"Leo Tolstoy" | "Anna Karenina" | 1873
Data i detta format tar flera gånger mindre utrymme än en fullständig JSON-fil. Naturligtvis finns det andra serialiseringsformat, men du behöver inte känna till alla just nu :) Det är bra om du är bekant med de nuvarande industristandardformaten när du utvecklar applikationer, och kommer ihåg deras fördelar och hur de skiljer sig från ett annan. Och med detta tar vår lektion sitt slut :) Glöm inte att lösa ett par uppgifter idag! Tills nästa gång! :)
Kommentarer
  • Populär
  • Ny
  • Gammal
Du måste vara inloggad för att lämna en kommentar
Den här sidan har inga kommentarer än