JavaRush /Блоги Java /Random-TG /Форматҳои сериализатсия дар Java

Форматҳои сериализатсия дар Java

Дар гурӯҳ нашр шудааст
Салом! Биёед дар бораи сериализатсия дар Java сӯҳбат кунем. Шояд шумо дар хотир доред, ки мо дар бораи сериализатсия лексияҳо доштем. Дуруст аст :) Ана аввалинаш Ва инак дуюмаш Агар шумо хуб дар хотир надоред, ки сериализатсия чӣ гуна кор мекунад, чаро он лозим аст ва барои он дар Java кадом асбобҳо мавҷуданд, шумо метавонед ин лексияҳоро аз назар гузаронед. Лексияи имрӯза назариявӣ хоҳад буд ва дар он мо форматҳои сериализатсияро бодиққат дида мебароем. Форматҳои сериализатсия дар Java - 1Аввалан, биёед дар хотир дорем, ки сериализатсия чист. Сериализатсия раванди нигоҳ доштани ҳолати an object ба пайдарпайии byteҳо мебошад. Десериализатсия раванди аз нав сохтани an object аз ин byteҳо мебошад. Объекти Java-ро метавон силсилавӣ кард ва тавассути шабака интиқол дод (масалан, ба компютери дигар). Ҳамин тавр, ҳамин пайдарпаии byteҳоро метавон дар форматҳои гуногун муаррифӣ кард. Шумо инро аз истифодаи ҳаррӯзаи компютер медонед. Масалан, китоби электронӣ (ё ҳуҷҷати матнии оддӣ), ки шумо хонда истодаед, метавонад дар як қатор форматҳои гуногун навишта шавад:
  • docx (формати Microsoft Word);
  • pdf (формати Adobe);
  • mobi (одатан дар дастгоҳҳои Amazon Kindle истифода мешавад);
  • ва бисёр чизҳои дигар (ePub, djvu, fb2...).
Чунин ба назар мерасад, ки вазифа як аст: матнро дар шакли ба одамон хондан пешкаш кардан. Аммо одамон як қатор форматҳоро ихтироъ кардаанд. Хатто ба тафсилоти кори онхо нарафта, тахмин кардан мумкин аст, ки ин кор бо сабабе сурат гирифтааст. Ҳар яке аз онҳо эҳтимол дорад, афзалиятҳо ва нуқсонҳои худро дар муқоиса бо дигарон. Шояд форматҳои сериализатсия мувофиқи ҳамон принсип сохта шуда бошанд? Хуб, тахмини хуб, донишҷӯ! :) Чӣ тавр аст. Гап дар он аст, ки интиқоли маълумот аз масофа кори хеле нозук аст ва дар он омилҳои зиёде мавҷуданд. Кӣ маълумотро интиқол медиҳад? Дар куҷо? Кадом ҳаҷм? Оё ҷониби қабулкунанда шахс ё мошин хоҳад буд (яъне маълумот бояд барои одамон хонда шавад)? Кадом дастгоҳ маълумотро мехонад? Равшан аст, ки вазъиятҳо гуногунанд. Вақте ки шумо бояд тасвири 500KB-ро аз як смартфон ба смартфони дигар интиқол диҳед, ин як чиз аст. Ва вақте ки мо дар бораи 500 тераbyte маълумотҳои тиҷорӣ сухан меронем, комилан фарқ мекунад, ки бояд ба қадри имкон самаранок фишурда шаванд ва ҳамзамон ҳарчи зудтар интиқол дода шаванд. Биёед форматҳои асосии сериализатсияро дида бароем ва бартарӣ ва нуқсонҳои ҳар яки онҳоро бубинем!

JSON

Навиштани an objectи JavaScript. Шумо аллакай бо ӯ каме ошно ҳастед! Мо дар ин лексия дар бораи он сӯҳбат кардем ва мо дар ин ҷо ба силсилаисозии JSON назар кардем . Он барои як сабаб номи худро гирифт. Объектҳои Java, ки ба JSON табдил дода шудаанд, воқеан ба an objectҳои JavaScript монанданд. Барои фаҳмидани маънои an objectи мо ба шумо JavaScript донистан лозим нест:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Аз як an object гузаштан шарт нест. JSON инчунин метавонад як қатор an objectҳоро дар бар гирад:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Азбаски JSON an objectи JavaScript аст, он форматҳои зерини маълумоти JavaScript-ро дастгирӣ мекунад:
  • сатрҳо;
  • рақамҳо (рақам);
  • an objectҳо (an object);
  • массивҳо (массив);
  • арзишҳои логикӣ (ҳақиқӣ ва бардурӯғ);
  • нул.
JSON кадом бартариҳо дорад?
  1. Формате, ки барои одамон хонда мешавад. Ин як бартарии возеҳ аст, агар корбари ниҳоии шумо инсон бошад. Масалан, serverи шумо пойгоҳи додаҳоро бо ҷадвалҳои парвоз нигоҳ медорад. Муштарии инсонӣ ҳангоми нишастан дар хона дар компютер маълумотро аз ин махзани маълумот бо истифода аз барномаи веб дархост мекунад. Азбаски шумо бояд маълумотро дар формате пешниҳод кунед, ки ӯ фаҳмад, JSON як ҳалли олӣ аст.

  2. Соддаӣ. Шумо метавонед бигӯед, ки ин ибтидоӣ аст :) Дар боло мо ду файли JSON-ро мисол овардем. Ва ҳатто агар шумо ҳеҷ гоҳ дар бораи мавҷудияти JavaScript нашунида бошед (бигзор an objectҳои он), шумо метавонед ба осонӣ фаҳмед, ки чӣ гуна an objectҳо дар он тасвир шудаанд.
    Тамоми ҳуҷҷатҳои JSON як саҳифаи веб бо якчанд тасвирҳо мебошанд.

  3. Васеъ. JavaScript забони бартаридоштаи фронт мебошад ва шартҳои онро дикта мекунад. Истифодаи JSON ҳатмист. Аз ин рӯ, шумораи зиёди хидматҳои веб JSON-ро ҳамчун формати табодули маълумот истифода мебаранд. Ҳар як IDE муосир формати JSON-ро дастгирӣ мекунад (аз ҷумла Intellij IDEA). Барои кор бо JSON барои ҳама забонҳои имконпазири барномасозӣ як даста китобхонаҳо навишта шудаанд.

Масалан, шумо аллакай бо китобхонаи Ҷексон дар лексия кор кардаед, ки мо дар он ҷо мо силсиласозии an objectҳои Java-ро ба JSON омӯхтем. Аммо ба ғайр аз Ҷексон, масалан, GSON мавҷуд аст - китобхонаи хеле қулай аз Google.

ЯМЛ

Дар ибтидои мавҷудияти худ, он барои Yet Another Markup Language - "забони дигари аломатгузорӣ" буд. Дар он вақт он ҳамчун рақиби XML ҷойгир карда шуда буд. Ҳоло, пас аз гузашти вақт, он маънои "YAML Ain't Markup Language" аст ("YAML забони аломатгузорӣ нест"). Ӯ чӣ гуна аст? Биёед тасаввур кунем, ки мо бояд барои бозии компютерии худ 3 синфи аломат эҷод кунем: Ҷанговар, Маҷ ва Дузд. Онҳо дорои хусусиятҳои зерин хоҳанд буд: қувват, чолокӣ, тобоварӣ ва маҷмӯи силоҳ. Ин аст он чизест, ки файли 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 дорои сохтори дарахт аст: баъзе элементҳо дар дохor дигарон ҷойгир шудаанд. Мо метавонем лонаро бо истифода аз миқдори муайяни ҷойҳо барои ифодаи ҳар як сатҳ назорат кунем. Формати YAML кадом бартариҳо дорад?
  1. Ба одам хондан мумкин аст. Боз ҳам, ҳатто агар шумо файли yaml-ро бидуни тавсиф бинед, шумо метавонед ба осонӣ фаҳмед, ки кадом an objectҳо дар он тасвир шудаанд. YAML ин аст, ки то чӣ андоза инсон хондан мумкин аст, ки саҳифаи асосии yaml.org файли муқаррарии yaml аст :)

  2. Компактӣ. Сохтори файл бо фосила ташкил карда мешавад: истифодаи қавс ё нохунак лозим нест.

  3. Дастгирии сохторҳои додаҳо ба забонҳои барномасозӣ. Бартарии бузурги YAML нисбат ба JSON ва бисёр форматҳои дигар дар он аст, ки он сохторҳои гуногуни маълумотро дастгирӣ мекунад. Дар байни онҳо:

    • !!харита
      Маҷмӯаи бетартиби калид:ҷуфтҳои арзишӣ бидуни имкони такрорӣ;

    • !!omap
      Пайдарпайии тартибдодашудаи калид:ҷуфтҳои арзиш бидуни имкони такрорӣ;

    • !!ҷуфтҳо:
      пайдарпайии тартибёфтаи калид:ҷуфтҳои арзиш бо имкони такрорӣ;

    • !!
      маҷмӯи пайдарпайии бетартиби арзишҳое, ки ба ҳамдигар баробар нестанд;

    • !!seq
      пайдарпайии арзишҳои ихтиёрӣ;

    Баъзе аз ин сохторҳо барои шумо аз Java шинос хоҳанд шуд! :) Ба шарофати ин хусусият, шумо метавонед сохторҳои гуногуни маълумотро аз забонҳои барномасозӣ ба формати YAML силсилавӣ кунед.

  4. Қобorяти истифодаи лангар ва тахаллус

    Тарҷумаи калимаҳои «лангар» ва «тахаллус» - «лангар» ва «тахаллус». Аслан, он моҳияти ин истилоҳҳоро дар YAML комилан дақиқ тавсиф мекунад.

    Онҳо ба шумо имкон медиҳанд, ки унсурро дар файли yaml муайян кунед ва агар он такроран рух диҳад, ба он дар қисми боқимондаи файл муроҷиат кунед. Лангар бо истифода аз рамз сохта мешавад &ва тахаллус бо истифода аз *.

    Фарз мекунем, ки дар мо файле бо тавсифи китобҳои Лев Толстой мавҷуд аст. Барои он ки ҳар дафъа ба таври дастӣ номи муаллифро нанависем, мо танҳо як лангари "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

    Вақте ки мо ин файлро бо ягон таҳлилгар мехонем, арзиши "Лев Толстой" дар ҷойҳои дуруст ба ҷои тахаллуси мо иваз карда мешавад.

  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 дуӣ)

Тавре ки аз номаш бармеояд, он ба JSON хеле монанд аст, аммо барои одамон хондан қобor қабул нест ва бо маълумот дар формати дуӣ кор мекунад. Ин онро барои нигоҳдорӣ ва интиқоли тасвирҳо ва замимаҳои дигар хеле қулай мегардонад. Илова бар ин, BSON баъзе намудҳои додаҳоро, ки дар JSON дастрас нестанд, дастгирӣ мекунад. Масалан, шумо метавонед сана (дар формати миллисония) ё ҳатто як пораи рамзи JavaScript-ро ба файли BSON нависед. Пойгоҳи маъмули NoSQL MongoDB маълумотро дар формати BSON нигоҳ медорад.

Протоколи ба мавқеъ асосёфта

Дар баъзе ҳолатҳо, мо бояд миқдори додаҳои интиқолшударо ба таври назаррас кам кунем (масалан, агар маълумот зиёд бошад ва мо бояд сарбориро кам кунем). Дар ин ҳолат, мо метавонем протоколи мавқеъро истифода барем , яъне арзишҳои параметрро бидуни номи худи параметрҳо гузаронем.
"Leo Tolstoy" | "Anna Karenina" | 1873
Маълумот дар ин формат назар ба файли мукаммали JSON фазои камтарро ишғол мекунад. Албатта, форматҳои дигари сериализатсия вуҷуд доранд, аммо ба шумо ҳоло лозим нест, ки ҳамаи онҳоро донед :) Хуб аст, ки бо форматҳое, ки ҳоло стандарти саноатӣ барои таҳияи барномаҳо мебошанд, шинос шавед ва бартариҳо ва фарқиятҳои онҳоро аз ҳамдигар дар хотир доред. . Ва лекцияи мо ба охир расид :) Имруз халли як-ду масъаларо фаромуш накунед! То боздид! :)
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION