CodeGym /Blog Java /Random-PL /Formaty serializacji Java
Autor
Andrey Gorkovenko
Frontend Engineer at NFON AG

Formaty serializacji Java

Opublikowano w grupie Random-PL
Cześć! Porozmawiajmy o serializacji. Pewnie pamiętasz, że mieliśmy już lekcje na temat serializacji. I tak też zrobiliśmy :) Oto pierwszy A oto drugi. Jeśli nie pamiętasz dobrze, jak działa serializacja, dlaczego serializacja jest potrzebna i jakie narzędzia ma Java do serializacji, możesz przejrzeć te lekcje. Dzisiejsza lekcja będzie poświęcona teorii. Przyjrzymy się bliżej formatom serializacji. Najpierw przypomnijmy sobie, czym jest serializacja. Serializacja to proces przechowywania stanu obiektu w sekwencji bajtów. Deserializacja to proces przywracania obiektu z tych bajtów. Obiekt Java można serializować i przesyłać przez sieć (na przykład do innego komputera). Sekwencja bajtów może być reprezentowana w różnych formatach. To pojęcie jest ci znane ze zwykłego użytkowania komputera. Na przykład książkę elektroniczną (lub prosty dokument tekstowy) można zapisać w wielu różnych formatach:
  • docx (format Microsoft Word);
  • pdf (format Adobe);
  • mobi (powszechnie używany na urządzeniach Amazon Kindle);
  • i wiele więcej (ePub, djvu, fb2 itp.).
W każdym przypadku cel wydaje się być ten sam: przedstawić tekst w formie czytelnej dla człowieka. Mimo to ludzie wymyślili wiele różnych formatów. Nie wchodząc w szczegóły ich pracy, możemy założyć, że mieli dobre powody. Każdy format ma swoje zalety i wady w porównaniu z resztą. Może według tych samych zasad stworzono różne formaty serializacji? Doskonałe przypuszczenie, uczniu! :) Dokładnie tak. Rzeczywistość jest taka, że ​​przesyłanie danych przewodowo (lub bezprzewodowo) jest trudnym biznesem i obejmuje wiele czynników. Kto wysyła dane? Dokąd? Jaka głośność? Czy odbiorcą będzie człowiek czy komputer (tj. czy dane powinny być czytelne dla człowieka)? Jakie urządzenie odczyta dane? Oczywiście te sytuacje są różne. Wysłanie obrazu o wielkości 500 KB z jednego smartfona do drugiego to jedno. A zupełnie co innego, jeśli mówimy o 500 terabajtach danych biznesowych, które trzeba optymalnie skompresować i jak najszybciej przesłać. Zapoznajmy się z głównymi formatami serializacji i rozważmy zalety i wady każdego z nich!

JSON

Notacja obiektu JavaScript. Wiesz już trochę o tym formacie! Mówiliśmy o tym w tej lekcji , a serializację do formatu JSON omówiliśmy właśnie tutaj . Nie bez powodu ma swoją nazwę. Obiekty Java przekonwertowane na JSON wyglądają dokładnie tak samo jak obiekty w JavaScript. Nie musisz znać JavaScript, aby zrozumieć nasz obiekt:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Nie ograniczamy się do wysłania pojedynczego przedmiotu. Format JSON może również reprezentować tablicę obiektów:

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

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Ponieważ JSON reprezentuje obiekty JavaScript, obsługuje następujące formaty danych JavaScript:
  • smyczki;
  • liczby;
  • przedmioty;
  • tablice;
  • wartości logiczne (prawda i fałsz);
  • zero.
Jakie są zalety formatu JSON?
  1. Format czytelny dla człowieka. Jest to oczywista zaleta, jeśli użytkownik końcowy jest człowiekiem. Załóżmy na przykład, że twój serwer ma bazę danych z rozkładem lotów. Klient siedzący przy komputerze w domu żąda danych z tej bazy danych za pomocą aplikacji internetowej. Ponieważ musisz dostarczać dane w formacie zrozumiałym dla niego, JSON jest świetnym rozwiązaniem.

  2. Prostota. To super proste :) Powyżej podaliśmy przykład dwóch plików JSON. I nawet jeśli nie słyszałeś o JavaScript (nie mówiąc już o obiektach JavaScript), możesz łatwo zrozumieć rodzaj opisanych tam obiektów.
    Cała dokumentacja JSON składa się ze strony internetowej z kilkoma obrazkami.

  3. Powszechne stosowanie. JavaScript jest dominującym językiem front-endowym i ma swoje własne wymagania. Korzystanie z JSON jest koniecznością. Dlatego ogromna liczba usług internetowych wykorzystuje JSON jako format wymiany danych. Każde nowoczesne IDE obsługuje format JSON (w tym IntelliJ IDEA). Napisano wiele bibliotek dla różnych języków programowania, aby umożliwić pracę z JSON.

Na przykład już pracowałeś z biblioteką Jacksona podczas lekcji, w której nauczyliśmy się serializować obiekty Java do formatu JSON. Ale oprócz Jacksona mamy np. GSON , czyli bardzo wygodną bibliotekę od Google.

YAML

Początkowo YAML oznaczał „jeszcze inny język znaczników”. Kiedy się zaczął, był pozycjonowany jako konkurent XML. Teraz, wraz z upływem czasu, YAML zaczął oznaczać „YAML nie jest językiem znaczników”. Co to właściwie jest? Wyobraźmy sobie, że musimy stworzyć 3 klasy reprezentujące postacie w grze komputerowej: Wojownika, Maga i Złodzieja. Będą miały następujące cechy: siła, zwinność, wytrzymałość, zestaw broni. Oto jak wyglądałby plik YAML opisujący nasze klasy:

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
Plik YAML ma strukturę drzewa: niektóre elementy są zagnieżdżone w innych. Możemy kontrolować zagnieżdżanie za pomocą określonej liczby spacji, których używamy do oznaczenia każdego poziomu. Jakie są zalety formatu YAML?
  1. Czytelne dla człowieka. Ponownie, nawet widząc plik YAML bez opisu, możesz łatwo zrozumieć obiekty, które opisuje. YAML jest tak czytelny dla człowieka, że ​​strona yaml.org jest zwykłym plikiem YAML :)

  2. Ścisłość. Struktura plików jest tworzona za pomocą spacji: nie ma potrzeby używania nawiasów ani cudzysłowów.

  3. Obsługa natywnych struktur danych dla języków programowania. Ogromną przewagą YAML nad JSON i wieloma innymi formatami jest to, że obsługuje różne struktury danych. Zawierają:

    • !!mapa
      Nieuporządkowany zestaw par klucz-wartość, które nie mogą mieć duplikatów;

    • !!omap
      Uporządkowana sekwencja par klucz-wartość, która nie może mieć duplikatów;

    • !!pary:
      uporządkowana sekwencja par klucz-wartość, które mogą mieć duplikaty;

    • !!set
      Nieuporządkowana sekwencja wartości, które nie są sobie równe;

    • !!seq
      Sekwencja dowolnych wartości;

    Niektóre z tych struktur rozpoznasz z Javy! :) Oznacza to, że różne struktury danych z języków programowania mogą być serializowane do YAML.

  4. Możliwość korzystania z kotwicy i aliasu

    Te znaczniki pozwalają zidentyfikować jakiś element w pliku YAML, a następnie odwołać się do niego w pozostałej części pliku, jeśli powtarza się. Kotwica jest tworzona za pomocą symbolu & , a alias jest tworzony za pomocą * .

    Załóżmy, że mamy plik opisujący książki Lwa Tołstoja. Aby uniknąć wpisywania nazwiska autora każdej książki, po prostu tworzymy kotwicę lwa i odwołujemy się do niej za pomocą aliasu, gdy jest to potrzebne:

    
    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
    

    Podczas analizowania tego pliku wartość „Lew Tołstoj” jest zastępowana w odpowiednich miejscach, w których mamy nasze aliasy.

  5. YAML może osadzać dane w innych formatach. Na przykład 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
            }
          ]
    

Inne formaty serializacji

XML

Ten format jest oparty na drzewie znaczników.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Każdy element składa się ze znacznika otwierającego i zamykającego (<> i </>). Każdy element może mieć elementy zagnieżdżone. XML to powszechny format, który jest tak samo dobry jak JSON i YAML (jeśli mówimy o prawdziwych projektach). Mamy osobną lekcję o XML .

BSON (binarny JSON)

Jak sama nazwa wskazuje, BSON jest bardzo podobny do JSON, ale nie jest czytelny dla człowieka i wykorzystuje dane binarne. W rezultacie bardzo dobrze nadaje się do przechowywania i przesyłania zdjęć oraz innych załączników. Ponadto BSON obsługuje niektóre typy danych niedostępne w JSON. Na przykład plik BSON może zawierać datę (w formacie milisekundowym) lub nawet fragment kodu JavaScript. Popularna baza danych MongoDB NoSQL przechowuje informacje w formacie BSON.

Protokół oparty na pozycji

W niektórych sytuacjach musimy drastycznie zmniejszyć ilość przesyłanych danych (np. gdy mamy dużo danych i potrzebujemy zmniejszyć obciążenie). W takiej sytuacji możemy skorzystać z protokołu pozycyjnego, czyli przesyłać wartości parametrów bez nazw samych parametrów.

"Leo Tolstoy" | "Anna Karenina" | 1873
Dane w tym formacie zajmują kilka razy mniej miejsca niż pełny plik JSON. Oczywiście istnieją inne formaty serializacji, ale nie musisz znać ich wszystkich od razu :) Dobrze, jeśli znasz aktualne standardowe formaty branżowe podczas tworzenia aplikacji i pamiętasz ich zalety oraz różnice między nimi inny. I na tym nasza lekcja dobiega końca :) Nie zapomnij rozwiązać dzisiaj kilku zadań! Do następnego razu! :)
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION