CodeGym/Java блог/Случаен/Формати за сериализиране на Java
John Squirrels
Ниво
San Francisco

Формати за сериализиране на Java

Публикувано в групата
здрасти Нека поговорим за сериализацията. Вероятно си спомняте, че вече имахме уроци по сериализация. Така и направихме :) Ето първото , а ето и второто. Ако не си спомняте добре How работи сериализацията, защо е необходима сериализация и Howви инструменти има Java за сериализация, можете да преминете през тези уроци. Днешният урок ще бъде за теория. Ще разгледаме по-подробно форматите за сериализация. Първо, нека си припомним Howво е сериализация. Сериализацията е процес на съхраняване на състоянието на обект в поредица от byteове. Десериализацията е процесът на възстановяване на обект от тези byteове. Java обект може да бъде сериализиран и изпратен по мрежа (например към друг компютър). Последователността от byteове може да бъде представена в различни формати. Вие сте запознати с тази концепция от обикновена употреба на компютър. Например, електронна книга (or обикновен текстов document) може да бъде написана в куп различни формати:
  • docx (формат на Microsoft Word);
  • pdf (формат на Adobe);
  • mobi (често се използва на устройства Amazon Kindle);
  • и много повече (ePub, djvu, fb2 и др.).
Във всеки случай целта изглежда е една и съща: представяне на текста в четима от хората форма. Все пак хората са измислor много различни формати. Без да навлизаме в подробности за работата им, можем да предположим, че са имали основателни причини. Всеки формат има своите предимства и недостатъци в сравнение с останалите. Може би различни формати за сериализация са създадени, следвайки същите тези принципи? Отлично предположение, студент! :) Точно така. Реалността е, че изпращането на данни по кабел (or безжично) е трудна работа и включва много фактори. Кой изпраща данните? Накъде? Какъв обем? Дали получателят ще бъде човек or компютър (т.е. данните трябва да бъдат четими от хора)? Какво устройство ще чете данните? Очевидно тези ситуации са различни. Едно е да изпратите изображение от 500 KB от един смартфон на друг. И съвсем друго е, ако говорим за 500 тераbyteа бизнес данни, които трябва да бъдат оптимално компресирани и изпратени възможно най-бързо. Нека се запознаем с основните формати за сериализация и да разгледаме предимствата и недостатъците на всеки от тях!

JSON

JavaScript обектна нотация. Вече знаете малко за този формат! Говорихме за това в този урок и разгледахме сериализацията в JSON точно тук . Името си получи с причина. Java обектите, преобразувани в JSON, всъщност изглеждат точно като обекти в JavaScript. Не е необходимо да знаете JavaScript, за да разберете нашия обект:
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Не се ограничаваме до изпращането на един обект. Форматът JSON може също да представлява масив от обекти:
[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Тъй като JSON представлява JavaScript обекти, той поддържа следните формати на данни на JavaScript:
  • струни;
  • числа;
  • обекти;
  • масиви;
  • булеви стойности (вярно и невярно);
  • нула.
Какви са предимствата на JSON?
  1. Четим от човека формат. Това е очевидно предимство, ако вашият краен потребител е човек. Да предположим например, че вашият сървър има база данни с разписание на полетите. Човешки клиент, седнал пред компютъра си у дома, изисква данни от тази база данни с помощта на уеб приложение. Тъй като трябва да предоставите данни във формат, който той може да разбере, JSON е чудесно решение.

  2. Простота. Супер просто е :) По-горе дадохме пример за два JSON file. И дори да не сте чували за JavaScript (да не говорим за JavaScript обекти), можете лесно да разберете вида на обектите, описани там.
    Цялата JSON documentация се състои от уеб page с няколко снимки.

  3. Широко разпространена употреба. JavaScript е доминиращият език за предния край и има свои собствени изисквания. Използването на JSON е задължително. Следователно огромен брой уеб услуги използват JSON като формат за обмен на данни. Всяка съвременна IDE поддържа формата JSON (включително IntelliJ IDEA). Написани са куп библиотеки за всички видове езици за програмиране, за да се даде възможност за работа с JSON.

Например, вече сте работor с библиотеката Jackson в урок, в който се научихме да сериализираме Java обекти в JSON. Но освен Jackson, имаме например GSON , която е много удобна библиотека от Google.

YAML

Първоначално YAML означава „Още един език за маркиране“. Когато започна, беше позициониран като конкурент на XML. Сега, с течение на времето, YAML започна да означава "YAML не е език за маркиране". Какво точно е? Нека си представим, че трябва да създадем 3 класа, които да представят герои в компютърна игра: Warrior, Mage и Thief. Те ще имат следните характеристики: сила, ловкост, издръжливост, набор от оръжия. Ето How би изглеждал YAML файл, описващ нашите класове:
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
YAML файлът има дървовидна структура: някои елементи са вложени в други. Можем да контролираме влагането, като използваме определен брой интервали, които използваме, за да обозначим всяко ниво. Какви са предимствата на YAML формата?
  1. Човешко четимо. Отново, дори да видите YAML файл без описание, можете лесно да разберете обектите, които той описва. YAML е толкова четим от човека, че уебсайтът yaml.org е обикновен YAML файл :)

  2. Компактност. Файловата структура се създава с помощта на интервали: няма нужда да използвате скоби or кавички.

  3. Поддръжка на собствени структури от данни за езици за програмиране. Огромното предимство на YAML пред JSON и много други формати е, че поддържа различни структури от данни. Те включват:

    • !!map
      Неподреден набор от двойки ключ-стойност, които не могат да имат дубликати;

    • !!omap
      Подредена поредица от двойки ключ-стойност, които не могат да имат дубликати;

    • !!pairs:
      Подредена поредица от двойки ключ-стойност, които могат да имат дубликати;

    • !!set
      Неподредена поредица от стойности, които не са равни една на друга;

    • !!seq
      Поредица от произволни стойности;

    Ще разпознаете някои от тези структури от Java! :) Това означава, че различни структури от данни от езици за програмиране могат да бъдат сериализирани в YAML.

  4. Възможност за използване на котва и псевдоним

    Тези маркери ви позволяват да идентифицирате няHowъв елемент в YAML файл и след това да го използвате в останалата част от file, ако се появява многократно. Котвата се създава с помощта на символа & , а псевдонимът се създава с помощта на * .

    Да предположим, че имаме файл, описващ книги на Лев Толстой. За да избегнем изписването на името на автора за всяка книга, ние просто създаваме лео котвата и се позоваваме на нея, използвайки псевдоним, когато имаме нужда от нея:

    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

    Когато този файл се анализира, стойността "Leo Tolstoy" се замества на правилните места, където имаме нашите псевдоними.

  5. YAML може да вгражда данни в други формати. Например 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
            }
          ]

Други формати за сериализация

XML

Този формат се основава на дърво на тагове.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Всеки елемент се състои от отварящ и затварящ таг (<> и </>). Всеки елемент може да има вложени елементи. XML е често срещан формат, който е също толкова добър, колкото JSON и YAML (ако говорим за реални проекти). Имаме отделен урок за XML .

BSON (двоичен JSON)

Както подсказва името му, BSON е много подобен на JSON, но не е четим от хора и използва двоични данни. В резултат на това е много добър за съхранение и прехвърляне на изображения и други прикачени файлове. Освен това BSON поддържа някои типове данни, които не са налични в JSON. Например BSON файл може да включва дата (във формат на мorсекунди) or дори част от JavaScript code. Популярната база данни MongoDB NoSQL съхранява информация във формат BSON.

Протокол, базиран на позиция

В някои ситуации трябва драстично да намалим количеството изпратени данни (например, ако имаме много данни и трябва да намалим натоварването). В тази ситуация можем да използваме протокола, базиран на позицията, тоест да изпратим стойности на параметри без имената на самите параметри.
"Leo Tolstoy" | "Anna Karenina" | 1873
Данните в този формат заемат няколко пъти по-малко място от пълен JSON файл. Разбира се, има и други формати за сериализиране, но не е нужно да знаете всички в момента :) Добре е, ако сте запознати с текущите индустриални стандартни формати, когато разработвате applications, и помните техните предимства и How се различават от един друг. И с това нашият урок приключва :) Не забравяйте да решите няколко задачи днес! До следващия път! :)
Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари