CodeGym /Java Blog /Willekeurig /Java-serialisatie-indelingen
John Squirrels
Niveau 41
San Francisco

Java-serialisatie-indelingen

Gepubliceerd in de groep Willekeurig
Hoi! Laten we het hebben over serialisatie. U herinnert zich waarschijnlijk dat we al lessen over serialisatie hebben gehad. En dat hebben we gedaan :) Hier is de eerste En hier is de tweede. Als u niet meer goed weet hoe serialisatie werkt, waarom serialisatie nodig is en welke tools Java heeft voor serialisatie, kunt u deze lessen doornemen. De les van vandaag gaat over theorie. We gaan de serialisatie-indelingen nader bekijken. Laten we eerst eens kijken wat serialisatie is. Serialisatie is het proces waarbij de status van een object wordt opgeslagen in een reeks bytes. Deserialisatie is het proces waarbij een object uit deze bytes wordt hersteld. Een Java-object kan worden geserialiseerd en via een netwerk worden verzonden (bijvoorbeeld naar een andere computer). De volgorde van bytes kan in verschillende formaten worden weergegeven. U kent dit concept uit het gewone computergebruik. Een elektronisch boek (of een eenvoudig tekstdocument) kan bijvoorbeeld in een aantal verschillende formaten worden geschreven:
  • docx (Microsoft Word-formaat);
  • pdf (Adobe-formaat);
  • mobi (vaak gebruikt op Amazon Kindle-apparaten);
  • en nog veel meer (ePub, djvu, fb2, enz.).
In beide gevallen lijkt het doel hetzelfde te zijn: de tekst presenteren in een voor mensen leesbare vorm. Toch hebben mensen veel verschillende formaten uitgevonden. Zonder op de details van hun werk in te gaan, kunnen we aannemen dat ze daar goede redenen voor hadden. Elk formaat heeft zijn eigen voor- en nadelen ten opzichte van de rest. Misschien zijn er verschillende serialisatieformaten gemaakt volgens dezelfde principes? Uitstekende gok, student! :) Dat klopt helemaal. De realiteit is dat het verzenden van gegevens via een draad (of draadloos) een lastige zaak is, en er zijn veel factoren bij betrokken. Wie stuurt de gegevens? Waarheen? Welk volume? Zal de ontvanger een mens of een computer zijn (dwz moeten de gegevens voor mensen leesbaar zijn)? Welk apparaat leest de gegevens? Het is duidelijk dat deze situaties verschillend zijn. Het is één ding om een ​​afbeelding van 500 KB van de ene smartphone naar de andere te sturen. En het is iets heel anders als we het hebben over 500 terabyte aan bedrijfsdata die optimaal gecomprimeerd en zo snel mogelijk verzonden moet worden. Laten we kennis maken met de belangrijkste serialisatieformaten en de voor- en nadelen van elk ervan bekijken!

JSON

JavaScript-objectnotatie. Je weet al een beetje over dit formaat! We hebben het er in deze les over gehad en we hebben het hier over serialisatie in JSON gehad . Het heeft zijn naam niet voor niets gekregen. Java-objecten die naar JSON zijn geconverteerd, zien er eigenlijk precies zo uit als objecten in JavaScript. U hoeft geen JavaScript te kennen om ons object te begrijpen:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
We zijn niet beperkt tot het verzenden van een enkel object. Het JSON-formaat kan ook een reeks objecten vertegenwoordigen:

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

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Omdat JSON JavaScript-objecten vertegenwoordigt, ondersteunt het de volgende JavaScript-gegevensindelingen:
  • snaren;
  • nummers;
  • voorwerpen;
  • reeksen;
  • booleans (waar en onwaar);
  • nul.
Wat zijn de voordelen van JSON?
  1. Voor mensen leesbaar formaat. Dit is een duidelijk voordeel als uw eindgebruiker een mens is. Stel dat uw server een database heeft met een vluchtschema. Een menselijke klant, die thuis achter zijn computer zit, vraagt ​​via een webapplicatie gegevens op uit deze database. Omdat u gegevens moet aanleveren in een formaat dat hij kan begrijpen, is JSON een geweldige oplossing.

  2. Eenvoud. Het is supereenvoudig :) Hierboven gaven we een voorbeeld van twee JSON-bestanden. En zelfs als je nog nooit van JavaScript hebt gehoord (laat staan ​​van JavaScript-objecten), kun je het soort objecten dat daar wordt beschreven gemakkelijk begrijpen.
    De hele JSON-documentatie bestaat uit een webpagina met een paar afbeeldingen.

  3. Wijdverbreid gebruik. JavaScript is de dominante front-end-taal en heeft zijn eigen vereisten. Het gebruik van JSON is een must. Daarom gebruiken een groot aantal webservices JSON als formaat voor gegevensuitwisseling. Elke moderne IDE ondersteunt het JSON-formaat (inclusief IntelliJ IDEA). Er zijn een aantal bibliotheken geschreven voor allerlei programmeertalen om het werken met JSON mogelijk te maken.

U hebt bijvoorbeeld al met de Jackson-bibliotheek gewerkt in een les waarin we leerden Java-objecten te serialiseren naar JSON. Maar naast Jackson hebben we bijvoorbeeld GSON , wat een erg handige bibliotheek van Google is.

YAML

Oorspronkelijk stond YAML voor "Yet Another Markup Language". Toen het begon, werd het gepositioneerd als een concurrent van XML. Nu, met het verstrijken van de tijd, is YAML "YAML Ain't Markup Language" gaan betekenen. Wat is het precies? Laten we ons voorstellen dat we 3 klassen moeten maken om personages in een computerspel te vertegenwoordigen: Warrior, Mage en Thief. Ze zullen de volgende kenmerken hebben: kracht, behendigheid, uithoudingsvermogen, een set wapens. Dit is hoe een YAML-bestand dat onze klassen beschrijft, eruit zou zien:

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
Een YAML-bestand heeft een boomstructuur: sommige elementen zijn genest in andere. We kunnen het nesten regelen met behulp van een bepaald aantal spaties, die we gebruiken om elk niveau aan te duiden. Wat zijn de voordelen van het YAML-formaat?
  1. Leesbare. Nogmaals, zelfs als u een YAML-bestand zonder beschrijving ziet, kunt u de objecten die het beschrijft gemakkelijk begrijpen. YAML is zo leesbaar voor mensen dat de website yaml.org een gewoon YAML-bestand is :)

  2. Compactheid. De bestandsstructuur wordt gemaakt met behulp van spaties: het is niet nodig om haakjes of aanhalingstekens te gebruiken.

  3. Ondersteuning voor native datastructuren voor programmeertalen. Het grote voordeel van YAML ten opzichte van JSON en vele andere formaten is dat het verschillende datastructuren ondersteunt. Ze bevatten:

    • !!map
      Een ongeordende set sleutel-waardeparen die geen duplicaten kunnen hebben;

    • !!omap
      Een geordende reeks sleutel-waardeparen die geen duplicaten kunnen hebben;

    • !!paren:
      Een geordende reeks sleutel-waardeparen die duplicaten kunnen hebben;

    • !!set
      Een ongeordende reeks waarden die niet aan elkaar gelijk zijn;

    • !!seq
      Een reeks willekeurige waarden;

    Sommige van deze structuren herken je wel van Java! :) Dit betekent dat verschillende datastructuren uit programmeertalen kunnen worden geserialiseerd in YAML.

  4. Mogelijkheid om anker en alias te gebruiken

    Met deze markeringen kunt u een element in een YAML-bestand identificeren en er vervolgens naar verwijzen in de rest van het bestand als het herhaaldelijk voorkomt. Een anker wordt gemaakt met behulp van het symbool & en een alias wordt gemaakt met * .

    Stel dat we een dossier hebben met boeken van Leo Tolstoj. Om te voorkomen dat de naam van de auteur voor elk boek wordt weggeschreven, maken we eenvoudig het leo-anker en verwijzen we ernaar met een alias wanneer we het nodig hebben:

    
    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
    

    Wanneer dit bestand wordt geparseerd, wordt de waarde "Leo Tolstoy" vervangen op de juiste plaatsen waar we onze aliassen hebben.

  5. YAML kan gegevens in andere indelingen insluiten. Bijvoorbeeld 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
            }
          ]
    

Andere serialisatieformaten

xml

Dit formaat is gebaseerd op een tagboom.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Elk element bestaat uit een openings- en sluitingstag (<> en </>). Elk element kan geneste elementen hebben. XML is een veelgebruikt formaat dat net zo goed is als JSON en YAML (als we het hebben over echte projecten). We hebben een aparte les over XML .

BSON (binaire JSON)

Zoals de naam al aangeeft, lijkt BSON erg op JSON, maar het is niet leesbaar voor mensen en gebruikt binaire gegevens. Hierdoor is het zeer geschikt voor het opslaan en overzetten van afbeeldingen en andere bijlagen. Bovendien ondersteunt BSON sommige gegevenstypen die niet beschikbaar zijn in JSON. Een BSON-bestand kan bijvoorbeeld een datum (in milliseconde-indeling) of zelfs een stukje JavaScript-code bevatten. De populaire MongoDB NoSQL-database slaat informatie op in BSON-indeling.

Positiegebaseerd protocol

In sommige situaties moeten we de hoeveelheid verzonden gegevens drastisch verminderen (bijvoorbeeld als we veel gegevens hebben en de belasting moeten verminderen). In deze situatie kunnen we het op positie gebaseerde protocol gebruiken, dat wil zeggen parameterwaarden verzenden zonder de namen van de parameters zelf.

"Leo Tolstoy" | "Anna Karenina" | 1873
Gegevens in dit formaat nemen vele malen minder ruimte in beslag dan een volledig JSON-bestand. Natuurlijk zijn er andere serialisatie-indelingen, maar u hoeft ze nu niet allemaal te kennen :) Het is goed als u bekend bent met de huidige industriestandaardindelingen bij het ontwikkelen van applicaties, en hun voordelen onthoudt en hoe ze van elkaar verschillen een andere. En hiermee komt onze les tot een einde :) Vergeet vandaag niet een aantal taken op te lossen! Tot de volgende keer! :)
Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION