JavaRush /Java Blog /Random-TL /Mga Format ng Serialization sa Java

Mga Format ng Serialization sa Java

Nai-publish sa grupo
Kamusta! Pag-usapan natin ang serialization sa Java. Malamang naaalala mo na mayroon na tayong mga lecture sa serialization. Tama :) Narito ang una At narito ang pangalawa Kung hindi mo masyadong matandaan kung paano gumagana ang serialization, bakit ito kailangan, at kung anong mga tool ang mayroon para dito sa Java, maaari mong suriin ang mga lecture na ito. Ang panayam ngayon ay magiging teoretikal, at sa loob nito ay susuriin natin ang mga format ng serialization. Форматы сериализации в Java - 1Una, tandaan natin kung ano ang serialization. Ang serialization ay ang proseso ng pag-iimbak ng estado ng isang bagay sa isang sequence ng mga byte. Ang deserialization ay ang proseso ng muling pagtatayo ng isang bagay mula sa mga byte na ito. Ang isang Java object ay maaaring i-serialize at ilipat sa isang network (halimbawa, sa isa pang computer). Kaya, ang parehong pagkakasunud-sunod ng mga byte ay maaaring katawanin sa iba't ibang mga format. Pamilyar ka dito mula sa pang-araw-araw na paggamit ng computer. Halimbawa, ang e-book (o simpleng tekstong dokumento) na iyong binabasa ay maaaring isulat sa isang grupo ng iba't ibang mga format:
  • docx (format ng Microsoft Word);
  • pdf (Adobe format);
  • mobi (karaniwang ginagamit sa mga aparatong Amazon Kindle);
  • at marami pang iba (ePub, djvu, fb2...).
Tila pareho ang gawain: ipakita ang teksto sa isang form na nababasa ng tao. Ngunit ang mga tao ay nag-imbento ng isang buong grupo ng mga format. Kahit na hindi na pumunta sa mga detalye ng kanilang trabaho, maaari naming ipagpalagay na ito ay ginawa para sa isang dahilan. Ang bawat isa sa kanila ay marahil ay may sariling mga pakinabang at disadvantages kumpara sa iba. Marahil ang mga format ng serialization ay nilikha ayon sa parehong prinsipyo? Well, magandang hulaan, mag-aaral! :) Ang paraan nito ay. Ang katotohanan ay ang pagpapadala ng data sa isang distansya ay isang medyo maselan na bagay, at mayroong maraming mga kadahilanan dito. Sino ang nagpapadala ng data? saan? Anong volume? Ang tatanggap ba ay isang tao o isang makina (ibig sabihin, dapat bang mabasa ng tao ang data)? Anong uri ng device ang magbabasa ng data? Malinaw, ang mga sitwasyon ay naiiba. Isang bagay kapag kailangan mong maglipat ng 500KB na imahe mula sa isang smartphone patungo sa isa pa. At ito ay ganap na naiiba kapag pinag-uusapan natin ang tungkol sa 500 terabytes ng data ng negosyo na kailangang i-compress nang mahusay hangga't maaari at sa parehong oras ay ilipat sa lalong madaling panahon. Tingnan natin ang mga pangunahing format ng serialization at tingnan ang mga pakinabang at disadvantage ng bawat isa!

JSON

JavaScript Object Notation. Medyo pamilyar ka na sa kanya! Napag-usapan namin ito sa panayam na ito , at tiningnan namin ang serialization sa JSON dito . Nakuha nito ang pangalan nito para sa isang dahilan. Ang mga bagay sa Java na na-convert sa JSON ay talagang kamukha ng mga bagay sa JavaScript. Hindi mo kailangang malaman ang JavaScript upang maunawaan ang kahulugan ng aming bagay:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Hindi kinakailangan na ipasa ang isang bagay. Ang JSON ay maaari ding maglaman ng isang hanay ng mga bagay:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Dahil ang JSON ay isang JavaScript object, sinusuportahan nito ang mga sumusunod na format ng data ng JavaScript:
  • mga string;
  • mga numero (numero);
  • mga bagay (bagay);
  • arrays (array);
  • boolean-значения (true и false);
  • null.
Какие же преимущества есть у JSON?
  1. Human-readable («человеко-читаемый») формат. Это очевидное преимущество, если твой конечный пользователь — человек. К примеру, на твоем serverе хранится база данных с расписанием авиаперелетов. Клиент-человек запрашивает данные из этой базы с помощью веб-applications, сидя дома за компьютером. Поскольку тебе нужно предоставить данные в формате, который он сможет понять, JSON будет отличным решением.

  2. Простота. Можно сказать — elementрность :) Выше мы привели пример двух JSON-файлов. И даже если ты вообще не слышал о существовании JavaScript (и уж тем более о его an objectх), ты легко поймешь, что за an objectы там описаны.
    Вся documentация JSON — это одна веб-page с парой картинок.

  3. Широкая распространенность. JavaScript — доминирующий язык фронтенда, и он диктует свои условия. Использование JSON — необходимость. Поэтому огромное число веб-сервисов используют JSON в качестве формата для обмена данными. Каждая современная IDE поддерживает JSON-формат (в том числе Intellij IDEA). Для работы с JSON написана куча библиотек для всех возможных языков программирования.

Например, ты уже работал с библиотекой Jackson в лекции, где мы учorсь сериализовывать Java-an objectы в JSON. Но помимо Jackson есть, например, GSON — очень удобная библиотека от Google.

YAML

В начале своего существования расшифровывался How Yet Another Markup Language — «еще один язык разметки». В то время его позиционировали How конкурента XML. Now же, по прошествии времени, он расшифровывается How «YAML Ain’t Markup Language» («YAML — не язык разметки»). What же он из себя представляет? Давай представим, что нам нужно создать 3 класса персонажей для нашей компьютерной игры: Воин, Маг и Вор. У них буду следующие характеристики: сила, ловкость, выносливость, набор оружия. Вот 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. Human-readable. Опять же, даже увидев yaml-файл без описания, ты легко поймешь, Howие an objectы там описаны. YAML насколько хорошо читается человеком, что главная page yaml.org — это обычный yaml-файл :)

  2. Компактность. Структура file формируется за счет пробелов: нет необходимости использовать скобки or кавычки.

  3. Поддержка структур данных, «родных» для языков программирования. Огромное преимущество YAML перед JSON и многими другими форматами заключается в том, что он поддерживает разные структуры данных. В их числе:

    • !!map
      Неупорядоченный набор пар ключ:meaning без возможности дубликатов;

    • !!omap
      Упорядоченная последовательность пар ключ:meaning без возможности дубликатов;

    • !!pairs:
      Упорядоченная последовательность пар ключ:meaning с возможностью дубликатов;

    • !!set
      Неупорядоченная последовательность значений, которые не равны друг другу;

    • !!seq
      Последовательность произвольных значений;

    Некоторые из этих структур знакомы тебе по Java! :) За счет этой фичи в формат YAML можно сериализовать разные структуры данных из языков программирования.

  4. Возможность использования anchor и alias

    Перевод слов «anchor» и «alias» — «якорь» и «псевдоним». В принципе, он довольно точно описывает суть этих терминов в YAML.

    Они позволяют тебе идентифицировать Howой-то элемент в yaml-файле, и ссылаться на него в остальных частях этого file, если он встречается повторно. Anchor создается с помощью символа &, а alias — с помощью *.

    Допустим, у нас есть файл с описанием книг Льва Толстого. Whatбы не писать Name автора каждый раз вручную, мы просто создадим якорь «leo» и будем ссылаться на него с помощью алиаса, когда нам это будет нужно:

    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

    Когда мы будем считывать этот файл Howим-то parserом, на месте нашего алиаса в нужных местах будет подставляться meaning «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>
Каждый элемент состоит из открывающего и закрывающего тега (<> и </>). У каждого element могут быть вложенные элементы. XML — распространенный формат, не уступающий JSON и YAML (если говорить об использовании в реальных проектах). Об XML у нас есть отдельная лекция.

BSON (binary JSON)

Как и следует из его названия, очень похож на JSON, но не является human-readable и оперирует данными в двоичном формате. За счет этого он очень удобен при хранении и передаче изображений и других вложений. Кроме того, BSON поддерживает некоторые типы данных, недоступные в JSON. Например, в BSON-файл можно записать date (в формате миллисекунд) or даже кусок JavaScript codeа. Популярная NoSQL база данных MongoDB хранит информацию именно в BSON формате.

Position based protocol

В некоторых ситуациях нам необходимо резко снизить количество передаваемых данных (например, если данных очень много и нужно уменьшить нагрузку). В этой ситуации мы можем использовать position based protocol, то есть передавать значения параметров без названий самих параметров.
"Leo Tolstoy" | "Anna Karenina" | 1873
Данные в таком формате занимают в разы меньше места, чем полноценный JSON файл. Конечно, существуют и другие форматы сериализации, но тебе сейчас не нужно знать их все :) Хорошо, если ты будешь знаком с теми форматами, которые сейчас являются промышленным standard при разработке приложений, и будешь помнить их преимущества и отличия друг от друга. А наша лекция на этом подошла к концу :) Не забудь решить пару задач сегодня! До новых встреч! :)
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION