JavaRush /Java Blogu /Random-AZ /Java-da seriallaşdırma formatları

Java-da seriallaşdırma formatları

Qrupda dərc edilmişdir
Salam! Java-da serializasiya haqqında danışaq. Yəqin yadınızdadır ki, seriallaşdırma ilə bağlı artıq mühazirələrimiz var idi. Düzdü :) Budur birincisiikincisi də əgər seriallaşdırmanın necə işlədiyini, nə üçün lazım olduğunu və Java-da bunun üçün hansı alətlərin olduğunu yaxşı xatırlamırsınızsa, bu mühazirələrə nəzər sala bilərsiniz. Bugünkü mühazirə nəzəri olacaq və orada seriallaşdırma formatlarına daha yaxından nəzər salacağıq. Java-da seriyalaşdırma formatları - 1Əvvəlcə seriallaşdırmanın nə olduğunu xatırlayaq. Serializasiya obyektin vəziyyətinin bayt ardıcıllığına saxlanması prosesidir. Deserializasiya bu baytlardan obyektin yenidən qurulması prosesidir. Java obyekti seriallaşdırıla və şəbəkə üzərindən ötürülə bilər (məsələn, başqa kompüterə). Beləliklə, eyni bayt ardıcıllığı müxtəlif formatlarda təqdim edilə bilər. Siz bunu gündəlik kompüter istifadənizdən bilirsiniz. Məsələn, oxuduğunuz elektron kitab (və ya sadə mətn sənədi) müxtəlif formatlarda yazıla bilər:
  • docx (Microsoft Word formatı);
  • pdf (Adobe formatı);
  • mobi (adətən Amazon Kindle cihazlarında istifadə olunur);
  • və daha çox (ePub, djvu, fb2...).
Görünür, vəzifə eynidir: mətni insan oxuya bilən formada təqdim etmək. Ancaq insanlar bir çox format icad etdilər. Onların işlərinin təfərrüatlarına varmadan belə, bunun bir səbəbə görə edildiyini güman etmək olar. Yəqin ki, onların hər birinin digərləri ilə müqayisədə öz üstünlükləri və mənfi cəhətləri var. Bəlkə seriallaşdırma formatları da eyni prinsip əsasında yaradılıb? Yaxşı, yaxşı təxmin edirəm, tələbə! :) Olduğu kimi. Fakt budur ki, məlumatların məsafəyə ötürülməsi olduqca incə bir şeydir və burada bir çox amillər var. Məlumatı kim ötürür? Harada? Hansı həcm? Qəbul edən tərəf şəxs və ya maşın olacaqmı (yəni məlumatlar insan tərəfindən oxuna bilən olmalıdır)? Hansı cihaz məlumatları oxuyacaq? Aydındır ki, vəziyyətlər fərqlidir. 500 KB təsviri bir smartfondan digərinə köçürməyiniz lazım olan bir şeydir. Mümkün qədər səmərəli şəkildə sıxılmalı və eyni zamanda mümkün qədər tez ötürülməli olan 500 terabaytlıq biznes məlumatından danışarkən tamamilə fərqlidir. Əsas seriallaşdırma formatlarına nəzər salaq və hər birinin üstünlükləri və mənfi cəhətlərinə baxaq!

JSON

JavaScript Obyekt Notasiyası. Siz artıq onunla bir az tanışsınız! Biz bu mühazirədə bu haqda danışdıq və burada JSON-da seriallaşdırmaya baxdıq . Bir səbəbə görə adını aldı. JSON-a çevrilən Java obyektləri əslində JavaScript obyektlərinə bənzəyir. Obyektimizin mənasını başa düşmək üçün JavaScript-i bilməyə ehtiyac yoxdur:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Bir obyekti keçmək lazım deyil. JSON həmçinin bir sıra obyektləri ehtiva edə bilər:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
JSON JavaScript obyekti olduğundan, aşağıdakı JavaScript məlumat formatlarını dəstəkləyir:
  • simlər;
  • nömrələr (nömrə);
  • obyektlər (obyekt);
  • massivlər (massiv);
  • boolean dəyərləri (doğru və yanlış);
  • sıfır.
JSON-un hansı üstünlükləri var?
  1. İnsan tərəfindən oxuna bilən format. Son istifadəçiniz insandırsa, bu açıq bir üstünlükdür. Məsələn, serveriniz uçuş cədvəlləri olan verilənlər bazasını saxlayır. İnsan müştəri evdə kompüterdə oturarkən veb proqramından istifadə edərək bu verilənlər bazasından məlumat tələb edir. Məlumatları onun başa düşəcəyi formatda təqdim etməli olduğunuz üçün JSON əla bir həlldir.

  2. Sadəlik. Bunun elementar olduğunu deyə bilərsiniz :) Yuxarıda iki JSON faylı nümunəsi verdik. JavaScript-in (obyektləri bir yana qalsın) mövcudluğu haqqında heç eşitməmisinizsə belə, orada hansı növ obyektlərin təsvir olunduğunu asanlıqla başa düşə bilərsiniz.
    Bütün JSON sənədləri bir neçə şəkil olan bir veb səhifədir .

  3. Geniş yayılmış. JavaScript dominant cəbhə dilidir və onun şərtlərini diktə edir. JSON-dan istifadə mütləqdir. Buna görə də, çox sayda veb xidmətləri məlumat mübadiləsi üçün bir format kimi JSON-dan istifadə edir. Hər bir müasir IDE JSON formatını (Intellij IDEA daxil olmaqla) dəstəkləyir. Bütün mümkün proqramlaşdırma dilləri üçün JSON ilə işləmək üçün bir dəstə kitabxana yazılmışdır.

Məsələn, siz Java obyektlərini JSON-da seriallaşdırmağı öyrəndiyimiz mühazirədə Cekson kitabxanası ilə artıq işləmisiniz. Ancaq Ceksondan başqa, məsələn, GSON var - Google-dan çox rahat bir kitabxana.

YAML

Mövcudluğunun əvvəlində o, Yet Another Markup Language - "başqa bir işarələmə dili" üçün dayanırdı. O zaman o, XML-ə rəqib kimi yer alırdı. İndi, zaman keçdikcə, "YAML İşarələmə Dili deyil" ("YAML işarələmə dili deyil") mənasını verir. O necədir? Təsəvvür edək ki, kompüter oyunumuz üçün 3 xarakter sinfi yaratmalıyıq: Warrior, Mage və Thief. Onlar aşağıdakı xüsusiyyətlərə sahib olacaqlar: güc, çeviklik, dözümlülük və bir sıra silahlar. Sinif təsvirləri olan YAML faylımız belə görünəcək:
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 faylı ağac quruluşuna malikdir: bəzi elementlər digərlərinin içərisinə yerləşdirilir. Hər səviyyəni göstərmək üçün müəyyən sayda boşluqdan istifadə etməklə yuva qurmağı idarə edə bilərik. YAML formatının hansı üstünlükləri var?
  1. İnsan tərəfindən oxuna bilən. Yenə təsviri olmayan bir yaml faylı görsəniz belə, orada hansı obyektlərin təsvir olunduğunu asanlıqla başa düşə bilərsiniz. Yaml.org -un əsas səhifəsinin adi yaml faylı olması insan üçün nə qədər yaxşı oxuna bilər :)

  2. Kompaktlıq. Fayl strukturu boşluqlarla formalaşır: mötərizədə və ya dırnaq işarələrindən istifadə etməyə ehtiyac yoxdur.

  3. Proqramlaşdırma dillərinə xas olan məlumat strukturlarına dəstək. YAML-in JSON və bir çox digər formatlardan böyük üstünlüyü onun müxtəlif məlumat strukturlarını dəstəkləməsidir. Onların arasında:

    • !!map
      Dublikatların mümkünlüyü olmayan açar:dəyər cütlərinin sıralanmamış kolleksiyası;

    • !!omap
      Dublikatların mümkünlüyü olmayan açar:dəyər cütlərinin sifarişli ardıcıllığı;

    • !!pairs:
      Dublikatların mümkünlüyü ilə açar:dəyər cütlərinin sifarişli ardıcıllığı;

    • !!
      bir-birinə bərabər olmayan sıralanmamış dəyərlər ardıcıllığını təyin edin;

    • !!seq
      İxtiyari qiymətlərin ardıcıllığı;

    Bu strukturlardan bəziləri sizə Java-dan tanış olacaq! :) Bu xüsusiyyət sayəsində müxtəlif məlumat strukturlarını proqramlaşdırma dillərindən YAML formatına seriallaşdıra bilərsiniz.

  4. Çapa və ləqəbdən istifadə etmək bacarığı

    “Anker” və “ləqəb” sözlərinin tərcüməsi – “lövbər” və “təxəllüs”. Prinsipcə, YAML-də bu terminlərin mahiyyətini kifayət qədər dəqiq təsvir edir.

    Onlar yaml faylındakı elementi müəyyən etməyə və təkrar baş verərsə, faylın qalan hissəsində ona istinad etməyə imkan verir. Anchor simvoldan istifadə edilərək yaradılır &və ləqəb istifadə edərək yaradılır *.

    Tutaq ki, Lev Tolstoyun kitablarının təsviri olan bir faylımız var. Müəllifin adını hər dəfə əl ilə yazmamaq üçün biz sadəcə olaraq lövbər "leo" yaradacağıq və lazım olanda ləqəbdən istifadə edərək ona istinad edəcəyik:

    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

    Bu faylı bəzi təhlilçi ilə oxuduğumuz zaman ləqəbimizin yerinə lazımi yerlərdə “Lev Tolstoy” dəyəri əvəz olunacaq.

  5. Siz YAML-də məlumatları başqa formatlarda yerləşdirə bilərsiniz. Məsələn, 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
            }
          ]

Digər seriallaşdırma formatları

XML

Bu format sözdə etiket ağacına əsaslanır.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Hər bir element açılış və bağlanma teqindən (<> və </>) ibarətdir. Hər bir elementin daxili elementləri ola bilər. XML ümumi formatdır, JSON və YAML-dən aşağı deyil (əgər real layihələrdə istifadədən danışırıqsa). XML üzrə ayrıca mühazirəmiz var .

BSON (ikili JSON)

Adından da göründüyü kimi, o, JSON-a çox bənzəyir, lakin insanlar tərəfindən oxunmur və binar formatda verilənlər üzərində işləyir. Bu, şəkilləri və digər əlavələri saxlamaq və köçürmək üçün çox rahat edir. Bundan əlavə, BSON JSON-da mövcud olmayan bəzi məlumat növlərini dəstəkləyir. Məsələn, BSON faylına tarix (milisaniyə formatında) və ya hətta JavaScript kodunun bir hissəsini yaza bilərsiniz. Məşhur NoSQL verilənlər bazası MongoDB məlumatı BSON formatında saxlayır.

Mövqe əsaslı protokol

Bəzi hallarda, ötürülən məlumatların həcmini kəskin şəkildə azaltmalıyıq (məsələn, çoxlu məlumat varsa və yükü azaltmaq lazımdırsa). Bu vəziyyətdə, mövqe əsaslı protokoldan istifadə edə bilərik , yəni parametrlərin öz adları olmadan parametr dəyərlərini ötürə bilərik.
"Leo Tolstoy" | "Anna Karenina" | 1873
Bu formatdakı məlumatlar tam hüquqlu JSON faylından daha az yer tutur. Təbii ki, başqa seriallaşdırma formatları da var, lakin onların hamısını indi bilmək lazım deyil :) İndi proqramların hazırlanması üçün sənaye standartı olan formatlarla tanış olmaq, onların üstünlüklərini və bir-birindən fərqlərini xatırlamaq yaxşıdır. . Və mühazirəmiz sona çatdı :) Bu gün bir-iki problemi həll etməyi unutmayın! Yenidən görüşərik! :)
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION