JavaRush /Blog Java /Random-PL /Formaty serializacji w Javie

Formaty serializacji w Javie

Opublikowano w grupie Random-PL
Cześć! Porozmawiajmy o serializacji w Javie. Pewnie pamiętacie, że mieliśmy już wykłady na temat serializacji. Zgadza się :) Oto pierwszy z nich A oto drugi Jeśli nie pamiętasz zbyt dobrze, jak działa serializacja, dlaczego jest potrzebna i jakie narzędzia są do tego w Javie, możesz przejrzeć te wykłady. Dzisiejszy wykład będzie miał charakter teoretyczny i w nim przyjrzymy się bliżej formatom serializacji. Formaty serializacji w Javie - 1Na początek przypomnijmy sobie, czym jest serializacja. Serializacja to proces przechowywania stanu obiektu w sekwencji bajtów. Deserializacja to proces rekonstrukcji obiektu z tych bajtów. Obiekt Java można serializować i przesyłać przez sieć (na przykład na inny komputer). Zatem tę samą sekwencję bajtów można przedstawić w różnych formatach. Znasz to z codziennego korzystania z komputera. Na przykład e-book (lub prosty dokument tekstowy), który czytasz, może być napisany w kilku różnych formatach:
  • docx (format Microsoft Word);
  • pdf (format Adobe);
  • mobi (powszechnie używany w urządzeniach Amazon Kindle);
  • i wiele więcej (ePub, djvu, fb2...).
Wydawać by się mogło, że zadanie jest takie samo: przedstawić tekst w formie czytelnej dla człowieka. Ale ludzie wymyślili całą masę formatów. Nawet nie wchodząc w szczegóły ich pracy, możemy założyć, że zrobiono to nie bez powodu. Każdy z nich prawdopodobnie ma swoje zalety i wady w porównaniu do pozostałych. Może formaty serializacji zostały stworzone według tej samej zasady? Cóż, dobry przypuszczenie, studentze! :) Tak właśnie jest. Faktem jest, że przesyłanie danych na odległość jest sprawą dość delikatną i składa się na to wiele czynników. Kto przesyła dane? Gdzie? Jaka głośność? Czy odbiorcą będzie osoba, czy maszyna (tj. czy dane powinny być czytelne dla człowieka)? Jakie urządzenie będzie czytać dane? Jasne, że sytuacje są różne. Co innego, gdy trzeba przenieść obraz o rozmiarze 500 KB z jednego smartfona na drugi. A zupełnie inaczej jest, gdy mówimy o 500 terabajtach danych biznesowych, które trzeba jak najskuteczniej skompresować, a jednocześnie jak najszybciej przesłać. Przyjrzyjmy się głównym formatom serializacji i przyjrzyjmy się zaletom i wadom każdego z nich!

JSON

Notacja obiektu JavaScript. Już go trochę znasz! Mówiliśmy o tym w tym wykładzie , a tutaj przyjrzeliśmy się serializacji w JSON . Nie bez powodu otrzymała swoją nazwę. Obiekty Java przekonwertowane do formatu JSON w rzeczywistości wyglądają dokładnie tak, jak obiekty JavaScript. Nie musisz znać JavaScriptu, żeby zrozumieć znaczenie naszego obiektu:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Nie jest konieczne przekazywanie jednego obiektu. JSON może również zawierać tablicę obiektów:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

 {
   "title": "Бесы",
   "author": "Федор Достоевский",
   "year": 1872
 },

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Ponieważ JSON jest obiektem JavaScript, obsługuje następujące formaty danych JavaScript:
  • smyczki;
  • liczby (liczba);
  • obiekty (obiekt);
  • tablice (tablica);
  • wartości logiczne (prawda i fałsz);
  • zero.
Jakie zalety ma JSON?
  1. Format czytelny dla człowieka. Jest to oczywista zaleta, jeśli użytkownikiem końcowym jest człowiek. Na przykład Twój serwer przechowuje bazę danych z rozkładami lotów. Klient będący człowiekiem żąda danych z tej bazy danych za pomocą aplikacji internetowej, siedząc w domu przy komputerze. Ponieważ musisz dostarczyć dane w formacie zrozumiałym dla niego, JSON jest doskonałym rozwiązaniem.

  2. Prostota. Można powiedzieć, że to elementarne :) Powyżej podaliśmy przykład dwóch plików JSON. Nawet jeśli nigdy nie słyszałeś o istnieniu JavaScript (nie mówiąc już o jego obiektach), możesz łatwo zrozumieć, jakiego rodzaju obiekty są tam opisane.
    Cała dokumentacja JSON to jedna strona internetowa z kilkoma obrazami.

  3. Rozpowszechniony. JavaScript jest dominującym językiem front-endu i to on dyktuje warunki. 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 kilka bibliotek do pracy z JSON dla wszystkich możliwych języków programowania.

Na przykład pracowałeś już z biblioteką Jacksona podczas wykładu, podczas którego nauczyliśmy się serializować obiekty Java do formatu JSON. Ale oprócz Jacksona jest na przykład GSON - bardzo wygodna biblioteka od Google.

YAML

Na początku swojego istnienia oznaczał Yet Another Markup Language – „kolejny język znaczników”. W tym czasie był pozycjonowany jako konkurent XML. Teraz, po upływie czasu, oznacza to „YAML Ain't Markup Language” („YAML nie jest językiem znaczników”). Jaki on jest? Wyobraźmy sobie, że musimy stworzyć 3 klasy postaci do naszej gry komputerowej: Wojownik, Mag i Złodziej. Będą mieli następujące cechy: siłę, zwinność, wytrzymałość i zestaw broni. Tak będzie wyglądał nasz plik YAML z opisami klas:
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ę drzewiastą: niektóre elementy są zagnieżdżone w innych. Możemy kontrolować zagnieżdżanie, używając określonej liczby spacji do oznaczenia każdego poziomu. Jakie zalety ma format YAML?
  1. Czytelne dla człowieka. Ponownie, nawet jeśli zobaczysz plik YAML bez opisu, możesz łatwo zrozumieć, jakie obiekty są tam opisane. YAML to stopień, w jakim czytelny dla człowieka jest fakt, że strona główna yaml.org jest zwykłym plikiem yaml :)

  2. Ścisłość. Strukturę pliku tworzą spacje: nie ma potrzeby stosowania nawiasów ani cudzysłowów.

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

    • !!map
      Nieuporządkowany zbiór par klucz:wartość bez możliwości duplikacji;

    • !!omap
      Uporządkowana sekwencja par klucz:wartość bez możliwości duplikatów;

    • !!pairs:
      Uporządkowana sekwencja par klucz:wartość z możliwością duplikacji;

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

    • !!seq
      Sekwencja dowolnych wartości;

    Niektóre z tych struktur będziesz znać z Javy! :) Dzięki tej funkcji można serializować różne struktury danych z języków programowania do formatu YAML.

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

    Tłumaczenie słów „kotwica” i „alias” - „kotwica” i „pseudonim”. W zasadzie dość trafnie opisuje istotę tych terminów w YAML.

    Umożliwiają identyfikację elementu w pliku YAML i odwoływanie się do niego w pozostałej części pliku, jeśli występuje on wielokrotnie. Kotwica jest tworzona za pomocą symbolu, &a alias jest tworzony za pomocą *.

    Załóżmy, że mamy plik z opisami książek Lwa Tołstoja. Aby uniknąć ręcznego wpisywania nazwiska autora za każdym razem, po prostu utworzymy kotwicę „leo” i będziemy się do niego odnosić, używając aliasu, gdy będzie 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

    Gdy odczytamy ten plik jakimś parserem, w miejsce naszego aliasu w odpowiednich miejscach zostanie podstawiona wartość „Leo Tołstoj”.

  5. Możesz osadzać dane w innych formatach w YAML. 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-a

Format ten opiera się na tzw. drzewie tagó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 jest powszechnym formatem, nie gorszym od JSON i YAML (jeśli mówimy o zastosowaniu w prawdziwych projektach). Mamy osobny wykład na temat XML .

BSON (binarny JSON)

Jak sama nazwa wskazuje, jest bardzo podobny do JSON, ale nie jest czytelny dla człowieka i działa na danych w formacie binarnym. Dzięki temu przechowywanie i przesyłanie obrazów i innych załączników jest bardzo wygodne. Ponadto BSON obsługuje niektóre typy danych, które nie są dostępne w formacie JSON. Na przykład możesz zapisać datę (w formacie milisekundowym) lub nawet fragment kodu JavaScript w pliku BSON. Popularna baza danych NoSQL MongoDB przechowuje informacje w formacie BSON.

Protokół oparty na pozycji

W niektórych sytuacjach musimy radykalnie zmniejszyć ilość przesyłanych danych (np. jeśli danych jest dużo i musimy zmniejszyć obciążenie). W tej sytuacji możemy zastosować protokół pozycyjny , czyli przekazać wartości parametrów bez nazw samych parametrów.
"Leo Tolstoy" | "Anna Karenina" | 1873
Dane w tym formacie zajmują znacznie mniej miejsca niż pełnoprawny plik JSON. Istnieją oczywiście inne formaty serializacji, ale nie trzeba ich wszystkich znać od razu :) Warto zapoznać się z formatami, które są obecnie standardem branżowym przy tworzeniu aplikacji i pamiętać o ich zaletach i różnicach między sobą . I nasz wykład dobiegł końca :) Nie zapomnijcie dziś rozwiązać kilku problemów! Do zobaczenia! :)
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION