JavaRush /Java blogi /Random-UZ /Java-da seriyalashtirish formatlari

Java-da seriyalashtirish formatlari

Guruhda nashr etilgan
Salom! Keling, Java-da serializatsiya haqida gapiraylik. Esingizda bo'lsa kerak, bizda seriallashtirish bo'yicha ma'ruzalar bo'lgan. To'g'ri :) Mana birinchisi Va mana ikkinchisi Agar serializatsiya qanday ishlashini, u nima uchun kerakligini va Java'da buning uchun qanday vositalar mavjudligini yaxshi eslamasangiz, ushbu ma'ruzalarni ko'rib chiqishingiz mumkin. Bugungi ma'ruza nazariy bo'ladi va unda biz serializatsiya formatlarini batafsil ko'rib chiqamiz. Java-da seriyalashtirish formatlari - 1Birinchidan, serializatsiya nima ekanligini eslaylik. Seriyalashtirish - ob'ekt holatini baytlar ketma-ketligiga saqlash jarayoni. Deserializatsiya - bu baytlardan ob'ektni qayta tiklash jarayoni. Java obyekti ketma-ketlashtirilishi va tarmoq orqali uzatilishi mumkin (masalan, boshqa kompyuterga). Shunday qilib, baytlarning bir xil ketma-ketligi turli formatlarda ifodalanishi mumkin. Siz buni har kuni kompyuterdan foydalanishdan yaxshi bilasiz. Masalan, siz o'qiyotgan elektron kitob (yoki oddiy matn hujjati) turli formatlarda yozilishi mumkin:
  • docx (Microsoft Word formati);
  • pdf (Adobe formati);
  • mobi (odatda Amazon Kindle qurilmalarida qo'llaniladi);
  • va boshqalar (ePub, djvu, fb2...).
Ko'rinishidan, vazifa bir xil: matnni odam o'qiy oladigan shaklda taqdim etish. Ammo odamlar bir nechta formatlarni ixtiro qilishdi. Ularning ishlarining tafsilotlariga kirmasdan ham, bu biron bir sababga ko'ra qilingan deb taxmin qilishimiz mumkin. Ularning har biri, ehtimol, boshqalarga nisbatan o'zining afzalliklari va kamchiliklariga ega. Balki ketma-ketlashtirish formatlari xuddi shu tamoyilga muvofiq yaratilgandir? Xo'sh, yaxshi taxmin, talaba! :) Bu shunday. Gap shundaki, ma'lumotlarni masofadan uzatish juda nozik narsa va unda ko'plab omillar mavjud. Ma'lumotlarni kim uzatadi? Qayerda? Qanday hajm? Qabul qiluvchi tomon shaxs yoki mashina bo'ladimi (ya'ni, ma'lumotlar inson tomonidan o'qilishi kerak)? Qaysi qurilma ma'lumotlarni o'qiydi? Shubhasiz, vaziyatlar boshqacha. 500 KB tasvirni bir smartfondan boshqasiga o'tkazish kerak bo'lganda, bu boshqa narsa. Va imkon qadar samarali siqilishi va bir vaqtning o'zida imkon qadar tezroq uzatilishi kerak bo'lgan 500 terabaytlik biznes ma'lumotlari haqida gap ketganda, bu butunlay boshqacha. Keling, asosiy seriyalashtirish formatlarini ko'rib chiqaylik va har birining afzalliklari va kamchiliklarini ko'rib chiqaylik!

JSON

JavaScript ob'ekt belgisi. Siz u bilan biroz tanishsiz! Biz bu ma'ruzada bu haqda gaplashdik va bu erda JSON'da serializatsiyani ko'rib chiqdik . U biron bir sababga ko'ra o'z nomini oldi. JSON-ga aylantirilgan Java ob'ektlari aslida JavaScript ob'ektlariga o'xshaydi. Ob'ektimizning ma'nosini tushunish uchun JavaScript-ni bilishingiz shart emas:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Bitta ob'ektdan o'tish shart emas. JSON shuningdek, bir qator ob'ektlarni o'z ichiga olishi mumkin:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
JSON JavaScript obyekti boʻlgani uchun u quyidagi JavaScript maʼlumotlar formatlarini qoʻllab-quvvatlaydi:
  • torlar;
  • raqamlar (raqam);
  • ob'ektlar (ob'ekt);
  • massivlar (massiv);
  • mantiqiy qiymatlar (to'g'ri va noto'g'ri);
  • null.
JSON qanday afzalliklarga ega?
  1. Inson o'qiy oladigan format. Sizning oxirgi foydalanuvchingiz inson bo'lsa, bu aniq afzallikdir. Misol uchun, sizning serveringiz parvozlar jadvallari bilan ma'lumotlar bazasini saqlaydi. Inson mijozi uyda kompyuterda o'tirganda veb-ilovadan foydalanib, ushbu ma'lumotlar bazasidan ma'lumotlarni so'raydi. Ma'lumotni u tushunadigan formatda taqdim etishingiz kerak bo'lganligi sababli, JSON ajoyib echimdir.

  2. Oddiylik. Buni boshlang'ich deb aytishingiz mumkin :) Yuqorida biz ikkita JSON fayliga misol keltirdik. Va agar siz JavaScript mavjudligi haqida hech qachon eshitmagan bo'lsangiz ham (uning ob'ektlari u yoqda tursin), u erda qanday ob'ektlar tasvirlanganligini osongina tushunishingiz mumkin.
    Butun JSON hujjatlari bir nechta rasmdan iborat bitta veb-sahifadir .

  3. Keng tarqalgan. JavaScript - bu asosiy til bo'lib, u o'z shartlarini belgilaydi. JSON dan foydalanish shart. Shu sababli, ko'plab veb-xizmatlar JSON-dan ma'lumotlarni almashish formati sifatida foydalanadi. Har bir zamonaviy IDE JSON formatini (shu jumladan Intellij IDEA) qo'llab-quvvatlaydi. Barcha mumkin bo'lgan dasturlash tillari uchun JSON bilan ishlash uchun bir qancha kutubxonalar yozilgan.

Masalan, siz ma'ruzada Jekson kutubxonasi bilan allaqachon ishlagansiz, u erda biz Java ob'ektlarini JSONga seriyalashtirishni o'rgandik. Ammo Jeksondan tashqari, masalan, GSON bor - Google'dan juda qulay kutubxona.

YAML

Mavjudligining boshida, u Yet Another Markup Language - "boshqa belgilash tili" degan ma'noni anglatadi. O'sha paytda u XML uchun raqobatchi sifatida joylashgan edi. Endi, vaqt o'tgandan so'ng, u "YAML Ain't Markup Language" degan ma'noni anglatadi ("YAML - belgilash tili emas"). U nimaga o'xshaydi? Tasavvur qilaylik, kompyuter o'yinimiz uchun 3 ta belgi sinfini yaratishimiz kerak: Jangchi, Mage va O'g'ri. Ular quyidagi xususiyatlarga ega bo'ladi: kuch, chaqqonlik, chidamlilik va qurollar to'plami. Sinf tavsiflari bilan bizning YAML faylimiz shunday ko'rinadi:
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 fayli daraxt tuzilishiga ega: ba'zi elementlar boshqalar ichiga joylashtirilgan. Biz har bir darajani belgilash uchun ma'lum miqdordagi bo'sh joydan foydalanib, joylashtirishni boshqarishimiz mumkin. YAML formatining qanday afzalliklari bor?
  1. Inson o'qishi mumkin. Shunga qaramay, agar siz tavsifsiz yaml faylini ko'rsangiz ham, u erda qanday ob'ektlar tasvirlanganligini osongina tushunishingiz mumkin. Yaml.org ning asosiy sahifasi oddiy yaml fayli ekanligini YAML inson uchun qanchalik yaxshi o'qiydi :)

  2. Kompaktlik. Fayl strukturasi bo'shliqlar bilan shakllantiriladi: qavs yoki tirnoqlardan foydalanishning hojati yo'q.

  3. Dasturlash tillariga xos bo'lgan ma'lumotlar tuzilmalarini qo'llab-quvvatlash. YAML ning JSON va boshqa ko'plab formatlarga nisbatan katta afzalligi shundaki, u turli xil ma'lumotlar tuzilmalarini qo'llab-quvvatlaydi. Ular orasida:

    • !!map
      Kalit:qiymat juftlarining tartibsiz to‘plami, takrorlanish imkoniyati yo‘q;

    • !!omap
      Kalit:qiymat juftlarining tartiblangan ketma-ketligi, takrorlanish imkoniyati yo‘q;

    • !!juftlar:
      kalitning tartiblangan ketma-ketligi: dublikat qilish imkoniyati bilan qiymat juftlari;

    • !!
      bir-biriga teng bo'lmagan qiymatlarning tartibsiz ketma-ketligini belgilang;

    • !!seq
      Ixtiyoriy qiymatlar ketma-ketligi;

    Ushbu tuzilmalarning ba'zilari sizga Java'dan tanish bo'ladi! :) Ushbu xususiyat tufayli siz turli xil ma'lumotlar tuzilmalarini dasturlash tillaridan YAML formatiga seriyalashtirishingiz mumkin.

  4. Anchor va taxallusdan foydalanish qobiliyati

    "Lanker" va "taxallus" so'zlarining tarjimasi - "langar" va "taxallus". Aslida, u YAMLda ushbu atamalarning mohiyatini juda aniq tasvirlab beradi.

    Ular yaml faylidagi elementni aniqlashga imkon beradi va agar u qayta-qayta sodir bo'lsa, faylning qolgan qismida unga murojaat qiladi. Anchor belgi yordamida yaratiladi &va taxallus yordamida yaratiladi *.

    Aytaylik, bizda Lev Tolstoy kitoblarining tavsiflari mavjud fayl bor. Muallifning ismini har safar qo'lda yozmaslik uchun biz shunchaki "leo" langarini yaratamiz va kerak bo'lganda taxallus yordamida unga murojaat qilamiz:

    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

    Ushbu faylni tahlil qiluvchi bilan o'qiganimizda, "Lev Tolstoy" qiymati bizning taxallus o'rniga to'g'ri joylarda almashtiriladi.

  5. YAML-ga boshqa formatlarda ma'lumotlarni joylashtirishingiz mumkin. Masalan, 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
            }
          ]

Boshqa seriyali formatlar

XML

Ushbu format teg daraxti deb ataladigan narsaga asoslangan.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Har bir element ochilish va yopish tegidan (<> va </>) iborat. Har bir element o'rnatilgan elementlarga ega bo'lishi mumkin. XML umumiy format bo'lib, JSON va YAML dan kam emas (agar biz haqiqiy loyihalarda foydalanish haqida gapiradigan bo'lsak). Bizda XML bo'yicha alohida ma'ruza bor .

BSON (ikkilik JSON)

Nomidan ko'rinib turibdiki, u JSONga juda o'xshaydi, lekin odam o'qiy olmaydi va ikkilik formatdagi ma'lumotlarda ishlaydi. Bu tasvirlar va boshqa qo'shimchalarni saqlash va uzatish uchun juda qulay qiladi. Bundan tashqari, BSON JSON-da mavjud bo'lmagan ba'zi ma'lumotlar turlarini qo'llab-quvvatlaydi. Masalan, siz BSON fayliga sanani (milisoniya formatida) yoki hatto JavaScript kodining bir qismini yozishingiz mumkin. MongoDB mashhur NoSQL ma'lumotlar bazasi ma'lumotlarni BSON formatida saqlaydi.

Lavozimga asoslangan protokol

Ba'zi hollarda biz uzatiladigan ma'lumotlar hajmini keskin kamaytirishimiz kerak (masalan, agar ma'lumotlar juda ko'p bo'lsa va biz yukni kamaytirishimiz kerak bo'lsa). Bunday vaziyatda biz pozitsiyaga asoslangan protokoldan foydalanishimiz mumkin , ya'ni parametr qiymatlarini parametrlarning nomlarisiz o'tkazish.
"Leo Tolstoy" | "Anna Karenina" | 1873
Ushbu formatdagi ma'lumotlar to'liq JSON fayliga qaraganda kamroq joy egallaydi. Albatta, boshqa ketma-ketlashtirish formatlari ham bor, lekin hozir hammasini bilish shart emas :) Ilovalarni ishlab chiqish uchun sanoat standarti bo'lgan formatlar bilan tanishish va ularning afzalliklari va bir-biridan farqlarini eslab qolish yaxshi. . Va ma'ruzamiz o'z nihoyasiga yetdi :) Bugun bir-ikkita masalani yechishni unutmang! Yana ko'rishguncha! :)
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION