JavaRush /Java блогу /Random-KY /Javaдагы сериалдаштыруу форматтары

Javaдагы сериалдаштыруу форматтары

Группада жарыяланган
Салам! Келгиле, Java тorнде сериялаштыруу жөнүндө сүйлөшөлү. Бизде буга чейин сериялаштыруу боюнча лекциялар болгонубуз эсиңизде болсо керек. Туура :) Мына, биринчиси , экинчиси, Сериалдаштыруу кандай иштээрин, эмне үчүн керек экенин жана Java-да ал үчүн кандай куралдар бар экенин жакшы эстебесеңиз, бул лекцияларды карап чыксаңыз болот. Бүгүнкү лекция теориялык болот жана анда биз сериялаштыруу форматтарын кылдат карап чыгабыз. Java'да сериалдаштыруу форматтары - 1Биринчиден, сериялаштыруу деген эмне экенин эстеп көрөлү. Сериялаштыруу - an objectтин абалын byte ырааттуулугуна сактоо процесси. Десерализация бул byteтардан an objectти реконструкциялоо процесси. Java an objectисин сериялаштырууга жана тармак аркылуу өткөрүп берүүгө болот (мисалы, башка компьютерге). Ошентип, ошол эле byte ырааттуулугу ар кандай форматтарда көрсөтүлүшү мүмкүн. Сиз муну күнүмдүк компьютер колдонуудан жакшы билесиз. Мисалы, сиз окуп жаткан электрондук китеп (же жөнөкөй тексттик document) ар кандай форматтарда жазылышы мүмкүн:
  • docx (Microsoft Word форматы);
  • pdf (Adobe форматы);
  • mobi (көбүнчө Amazon Kindle түзмөктөрүндө колдонулат);
  • жана башка көптөгөн нерселер (ePub, djvu, fb2...).
Бул милдет бир эле: текстти адам окуй турган формада берүү. Бирок адамдар бир топ форматтарды ойлоп табышты. Алардын иштеринин майда-чүйдөсүнө чейин айтпай эле койсок, бул кандайдыр бир себептерден улам жасалган деп болжолдоого болот. Алардын ар бири, балким, башкаларга салыштырмалуу өзүнүн артыкчылыктары жана кемчorктери бар. Балким, сериялаштыруу форматтары ошол эле принцип боюнча түзүлгөн? Ооба, жакшы, студент! :) Ушундай. Чындыгында алыстыкка маалыматтарды берүү өтө назик нерсе жана анда көптөгөн факторлор бар. Маалыматты ким өткөрөт? Кайда? Кандай көлөмдө? Кабыл алуучу тарап адам болобу же машина болобу (б.а. маалыматтар адам окуй тургандай болушу керек)? Кандай аппарат маалыматтарды окуйт? Албетте, жагдайлар ар кандай. 500 КБ сүрөттү бир смартфондон экинчисине өткөрүү керек болгондо, бул бир нерсе. Мүмкүн болушунча эффективдүү кысылып, ошол эле учурда мүмкүн болушунча тезирээк өткөрүлүп берorши керек болгон 500 тераbyte бизнес маалыматтары жөнүндө сөз болгондо, бул таптакыр башкача. Келгиле, сериалдаштыруунун негизги форматтарын карап көрөлү жана ар биринин артыкчылыктары менен кемчorктерин карап көрөлү!

JSON

JavaScript an objectинин белгилөө. Сиз аны менен бир аз таанышсыз! Биз бул лекцияда бул тууралуу сүйлөштүк жана бул жерде JSONде сериалдаштырууну карадык . Анын атын бир себеп менен алган. JSONга айландырылган Java an objectтери чындыгында JavaScript an objectилерине окшош. Биздин an objectтин маанисин түшүнүү үчүн JavaScriptти бorшиңиздин кереги жок:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Бир an objectти өткөрүү зарыл эмес. JSON ошондой эле an objectтердин массивдерин камтышы мүмкүн:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
JSON JavaScript an objectиси болгондуктан, ал төмөнкү JavaScript маалымат форматтарын колдойт:
  • саптар;
  • сандар (сан);
  • an objectилер (an object);
  • массивдер (массив);
  • логикалык баалуулуктар (чын жана жалган);
  • нөл.
JSON кандай артыкчылыктарга ээ?
  1. Адам окуй турган формат. Сиздин акыркы колдонуучу адам болсо, бул ачык артыкчылык болуп саналат. Мисалы, serverиңиз учуу графиги менен маалымат базасын сактайт. Адам кардары үйдө компьютерде отурганда веб-тиркеме аркылуу бул маалымат базасынан маалыматтарды сурайт. Дайындарды ал түшүнө турган форматта беришиңиз керек болгондуктан, JSON сонун чечим.

  2. Жөнөкөйлүк. Бул elementрдык деп айтса болот :) Жогоруда биз эки JSON файлынын мисалын бердик. Жана JavaScript бар экенин эч качан укпасаңыз да (анын an objectтерин айтпай эле коелу), анда кандай an objectтер сүрөттөлгөндүгүн оңой эле түшүнө аласыз.
    Бүт JSON documentтери бир нече сүрөттөрү бар бир веб-баракча .

  3. Кеңири таралган. JavaScript үстөмдүк кылуучу алдыңкы тил болуп саналат жана ал өзүнүн шарттарын айтып турат. JSON колдонуу милдеттүү болуп саналат. Ошондуктан, көптөгөн веб-кызматтар JSONди маалымат алмашуу форматы катары колдонушат. Ар бир заманбап IDE JSON форматын колдойт (анын ичинде Intellij IDEA). Бардык мүмкүн болгон программалоо тилдери үчүн JSON менен иштөө үчүн бир топ китепканалар жазылган.

Мисалы, сиз буга чейин лекцияда Джексон китепканасы менен иштегенсиз, анда биз Java an objectилерин JSONге сериялаштырууну үйрөнгөнбүз. Бирок Джексондон тышкары, мисалы, GSON бар - Googleден абдан ыңгайлуу китепкана.

YAML

Өзүнүн пайда болушунун башында, ал Yet Another Markup Language - "башка белгилөө тor" дегенди билдирген. Ал учурда XML үчүн атаандаш катары жайгаштырылган. Эми, убакыт өткөндөн кийин, ал "YAML Ain't Markup Language" дегенди билдирет ("YAML - белгилөө тor эмес"). Ал кандай? Келгиле, компьютердик оюнубуз үчүн 3 каарман классын түзүшүбүз керек деп элестетип көрөлү: Warrior, Mage жана Thief. Алар төмөнкүдөй өзгөчөлүктөргө ээ болот: күч, шамдагайлык, чыдамкайлык жана курал-жарактардын жыйындысы. Класстын сүрөттөмөлөрү менен 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 файлын көрсөңүз да, анда кандай an objectтер сүрөттөлүп жатканын оңой түшүнө аласыз. YAML адам үчүн канчалык жакшы окуса, yaml.org сайтынын негизги барагы кадимки yaml файлы :)

  2. Компакттуулук. Файл структурасы боштуктар менен түзүлөт: кашааларды же тырмакчаларды колдонуунун кереги жок.

  3. Программалоо тилдерине тиешелүү маалымат структураларын колдоо. JSON жана башка көптөгөн форматтарга караганда YAMLдин чоң артыкчылыгы - бул ар кандай маалымат структураларын колдойт. Алардын ичинен:

    • !!карта
      Ачкыч:баа жуптарынын иретсиз жыйнагы, кайталануу мүмкүнчүлүгү жок;

    • !!omap
      Ачкыч:баа жуптарынын иреттелген ырааттуулугу, кайталануу мүмкүнчүлүгү жок;

    • !!жуптар:
      Ачкычтын иреттелген ырааттуулугу: кайталануу мүмкүнчүлүгү бар маани жуптары;

    • !!коюу
      бири-бирине барабар эмес маанилердин иретсиз ырааттуулугу;

    • !!seq
      Ыктыярдуу маанилердин ырааттуулугу;

    Бул структуралардын айрымдары сизге Javaдан тааныш болот! :) Бул өзгөчөлүктүн аркасында сиз ар кандай маалымат структураларын программалоо тилдеринен YAML форматына сериялай аласыз.

  4. якор жана лакап атын колдонуу мүмкүнчүлүгү

    "казык" жана "лакап ат" деген сөздөрдүн котормосу - "казык" жана "псевдоним". Негизи, бул YAMLде бул терминдердин маңызын так сүрөттөйт.

    Алар yaml файлындагы элементти аныктоого мүмкүндүк берет жана ал кайра-кайра кайталанса, файлдын калган бөлүгүндө ага кайрылыңыз. Anchor символдун жардамы менен түзүлөт &жана лакап ат менен түзүлөт *.

    Бизде Лев Толстойдун китептерин сүрөттөгөн файл бар дейли. Ар бир жолу автордун атын кол менен жазып албаш үчүн, биз жөн гана "лео" анкерин түзүп, керек болгондо ага лакап ат менен кайрылабыз:

    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

    Бул файлды кандайдыр бир талдоочу менен окуганыбызда, "Лев Толстой" мааниси биздин лакап атыбыздын ордуна туура жерлерге алмаштырылат.

  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 (экorк JSON)

Анын аты айтып тургандай, ал JSONге абдан окшош, бирок адам окуй алbyte жана экorк форматтагы маалыматтарда иштейт. Бул сүрөттөрдү жана башка тиркемелерди сактоо жана өткөрүү үчүн абдан ыңгайлуу кылат. Мындан тышкары, BSON JSONде жок кээ бир маалымат түрлөрүн колдойт. Мисалы, сиз BSON файлына күндү (миллисекунд форматында) же жада калса JavaScript codeунун бир бөлүгүн жаза аласыз. Популярдуу NoSQL маалымат базасы MongoDB маалыматты BSON форматында сактайт.

Позицияга негизделген протокол

Кээ бир жагдайларда, биз (мисалы, маалыматтар көп болсо жана жүктү азайтуу керек болсо) өткөрүлүп берилүүчү көлөмүн кескин кыскартуу керек. Бул жагдайда биз позицияга негизделген протоколду колдоно алабыз , башкача айтканда, параметрдин маанилерин параметрлердин аталыштары жок өткөрөбүз.
"Leo Tolstoy" | "Anna Karenina" | 1873
Бул форматтагы маалыматтар толук кандуу JSON файлына караганда азыраак орун ээлейт. Албетте, сериалдаштыруунун башка форматтары бар, бирок алардын баарын азыртадан билүүнүн кереги жок :) Азыр тиркемени иштеп чыгуунун тармактык стандарты болгон форматтар менен таанышып, алардын артыкчылыктарын жана бири-биринен айырмаларын эстеп жүргөнүңүз жакшы. . Ал эми лекциябыз аяктады :) Бүгүн бир-эки маселени чечүүнү унутпаңыз! Көрүшкөнгө чейин! :)
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION