JavaRush /Java Blog /Random-TK /Java-da seriýalaşdyrma formatlary

Java-da seriýalaşdyrma formatlary

Toparda çap edildi
Salam! Java-da serializasiýa barada gürleşeliň. Serializasiýa boýunça eýýäm leksiýalarymyzyň bardygyny ýadyňyzda bolsa gerek. Dogry :) Ine, birinjisi , ine ikinjisi , seriallaşdyrmagyň nähili işleýändigini, näme üçin zerurdygyny we Java-da onuň üçin haýsy gurallaryň bardygyny gaty gowy ýada salmasaňyz, bu leksiýalardan geçip bilersiňiz. Bu günki leksiýa teoretiki bolar we onda seriallaşdyrma formatlaryna has içgin serederis. Java-da seriýalaşdyrma formatlary - 1Ilki bilen seriallaşdyrmagyň nämedigini ýada salalyň. Serializasiýa - obýektiň ýagdaýyny baýt yzygiderliliginde saklamak prosesi. Deserializasiýa - bu baýtlardan bir obýekti täzeden gurmak prosesi. Java obýekti seriýalaşdyrylyp, tor arkaly geçirilip bilner (mysal üçin, başga bir kompýutere). Şeýlelik bilen, baýtlaryň şol bir yzygiderliligini dürli formatlarda görkezip bolýar. Munuň bilen gündelik kompýuter ulanylyşy bilen tanyş. Mysal üçin, okaýan elektron kitabyňyzy (ýa-da ýönekeý tekst resminamasy) bir topar dürli formatda ýazyp bilersiňiz:
  • docx (Microsoft Word formaty);
  • pdf (Adobe formaty);
  • mobi (köplenç Amazon Kindle enjamlarynda ulanylýar);
  • we has köp (ePub, djvu, fb2 ...).
Wezipe birmeňzeş ýaly: teksti adam okalýan görnüşde hödürlemek. Emma adamlar bir topar format oýlap tapdylar. Işleriniň jikme-jikliklerine girmänem, munuň bir sebäbe görä edilendigini çaklap bileris. Olaryň hersiniň beýlekiler bilen deňeşdirilende öz artykmaçlyklary we kemçilikleri bar bolsa gerek. Belki seriallaşdyrma formatlary şol bir prinsip boýunça döredilen bolsa gerek? Gowy, çaklama, okuwçy! :) Bu nähili. Hakykat, maglumatlary uzak aralykdan geçirmek gaty näzik bir zat we onda köp faktor bar. Maglumatlary kim geçirýär? Nirede? Haýsy göwrüm? Alýan tarap adam ýa-da maşyn bolarmy (meselem, maglumatlar adam tarapyndan okalmalymy)? Maglumatlary haýsy enjam okar? Elbetde, ýagdaýlar başga. 500KB şekili bir smartfondan beýlekisine geçirmek zerur bolanda bir zat. Mümkin boldugyça täsirli gysylmaly we şol bir wagtyň özünde mümkin boldugyça çalt geçirilmeli 500 terabaýtlyk maglumat hakda aýdanymyzda düýbünden başga zat. Geliň, esasy seriallaşdyrma formatlaryna göz aýlalyň we hersiniň artykmaçlyklaryna we kemçiliklerine seredeliň!

JSON

JavaScript obýekt belligi. Siz eýýäm onuň bilen azajyk tanyş! Bu leksiýada bu hakda gürleşdik we JSON- da seriallaşdyryşa seretdik . Bir sebäbe görä adyny aldy. JSON-a öwrülen Java obýektleri aslynda JavaScript obýektlerine meňzeýär. Obýektimiziň manysyna düşünmek üçin JavaScript-i bilmegiň zerurlygy ýok:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Bir obýektden geçmek hökman däl. JSON obýektleriň toplumyny hem öz içine alyp biler:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
JSON JavaScript obýekti bolany üçin, aşakdaky JavaScript maglumat formatlaryny goldaýar:
  • setirler;
  • sanlar (san);
  • obýektler (obýekt);
  • massiwler (massiw);
  • bulean bahalary (dogry we ýalan);
  • null.
JSON-yň haýsy artykmaçlyklary bar?
  1. Adam okalýan format. Ahyrky ulanyjyňyz adam bolsa, bu aç-açan artykmaçlykdyr. Mysal üçin, serweriňiz uçuş tertibi bilen maglumat bazasyny saklaýar. Adam müşderisi, öýde kompýuterde otyrka web programmasy ulanyp, bu maglumatlar bazasyndan maglumatlary soraýar. Maglumatlary düşünip bilýän görnüşde bermeli bolansoň, JSON gaty gowy çözgüt.

  2. Sadalyk. Başlangyç diýip bilersiňiz :) oveokarda iki sany JSON faýlynyň mysalyny berdik. JavaScript-iň (obýektlerini goýman) barlygyny hiç wagt eşitmedik bolsaňyzam, ol ýerde haýsy obýektleriň beýan edilýändigine aňsatlyk bilen düşünip bilersiňiz.
    JSON resminamalarynyň hemmesi iki suratly bir web sahypasydyr .

  3. Giňden ýaýran. JavaScript öňdebaryjy dil bolup, şertlerini kesgitleýär. JSON-ny ulanmak hökmany zat. Şonuň üçin web hyzmatlarynyň köpüsi JSON-y maglumat alyşmak üçin format hökmünde ulanýarlar. Her häzirki zaman IDE JSON formatyny goldaýar (Intellij IDEA-ny goşmak bilen). JSON bilen mümkin bolan programmirleme dilleri üçin işlemek üçin bir topar kitaphana ýazyldy.

Mysal üçin, eýýäm Jekson kitaphanasy bilen leksiýada işlediňiz, bu ýerde Java obýektlerini JSON-a seriallaşdyrmagy öwrendik. Emma Jeksondan başga-da, mysal üçin GSON - Google-dan gaty amatly kitaphana bar.

YAML

Barlygynyň başynda, başga bir bellik dili - “başga bir bellik dili” diýmekdi. Şol wagt XML bilen bäsdeş hökmünde ýerleşdirilipdi. Indi wagtyň geçmegi bilen “YAML Ain't Markup Language” (“YAML bellik dili däl”) manysyny berýär. Ol nähili? Kompýuter oýnumyz üçin 3 simwol synpyny döretmelidigimizi göz öňüne getireliň: Warrior, Mage we Ogry. Olarda aşakdaky aýratynlyklar bolar: güýç, çeýeligi, çydamlylygy we ýaraglar toplumy. Synp beýany bolan YAML faýlymyz şeýle bolar:
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 faýlynda agaç gurluşy bar: käbir elementler beýlekileriň içinde höwürtge döredýär. Her derejäni görkezmek üçin belli bir boşluk ulanyp, höwürtge gözegçilik edip bileris. YAML formatynyň haýsy artykmaçlyklary bar?
  1. Adam okalýan. Againene-de bir düşündirişsiz ýaml faýly görseňizem, ol ýerde haýsy obýektleriň beýan edilýändigine aňsatlyk bilen düşünip bilersiňiz. YAML, yaml.org- yň baş sahypasynyň adaty ýaml faýlydygyny näderejede okap bolýar :)

  2. Ykjamlyk. Faýl gurluşy boşluklar bilen emele gelýär: ýaýlary ýa-da sitatalary ulanmagyň zerurlygy ýok.

  3. Programmirleme dillerinde doglan maglumat gurluşlaryna goldaw. YAML-yň JSON we beýleki köp formatlardan has uly artykmaçlygy, dürli maglumat gurluşlaryny goldaýar. Olaryň arasynda:

    • !! karta
      Düwmeleriň tertipsiz ýygyndysy: köpeltmek mümkinçiligi bolmadyk baha jübütleri;

    • !! omap
      Düwmäniň sargyt edilen yzygiderliligi: köpeltmek mümkinçiligi bolmadyk baha jübütleri;

    • !! jübütler:
      Düwmäniň sargyt edilen yzygiderliligi: köpeltmek mümkinçiligi bolan baha jübütleri;

    • !!
      biri-birine deň bolmadyk bahalaryň tertipsiz yzygiderliligini düzmek;

    • !! seq
      Esassyz gymmatlyklaryň yzygiderliligi;

    Bu gurluşlaryň käbiri size Java-dan tanyş bolar! :) Bu aýratynlygyň kömegi bilen, programmirleme dillerinden başlap, YAML formatyna çenli dürli maglumat gurluşlaryny seriallaşdyryp bilersiňiz.

  4. Gämi we lakam ulanmak ukyby

    “Gämi” we “lakam” - “labyr” we “lakam” sözleriniň terjimesi. Aslynda, bu sözleriň manysyny YAML-da gaty takyk suratlandyrýar.

    Yamaml faýlyndaky bir elementi kesgitlemäge we gaýtalanýan bolsa faýlyň galan bölegine salgylanmaga mümkinçilik berýär. Gämi nyşan bilen döredilýär &we lakam ulanylýar *.

    Le Tolstoýyň kitaplaryny suratlandyrýan faýlymyz bar diýeliň. Her gezek awtoryň adyny el bilen ýazmazlyk üçin, diňe "leo" labyryny dörederis we zerur bolanda lakam ulanarys:

    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 faýly käbir derňewçi bilen okanymyzda, “Le Tolstoý” bahasy lakamymyzyň ýerine gerek ýerlerde çalşyrylar.

  5. Maglumatlary YAML-da başga formatlara ýerleşdirip bilersiňiz. Mysal üçin, 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
            }
          ]

Beýleki seriallaşdyrma formatlary

XML

Bu format bellik agajy diýlip atlandyrylýar.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Her element açylyş we ýapmak belliginden (<> we </>) durýar. Her elementiň içindäki elementler bolup biler. XML umumy format, JSON we YAML-dan pes däl (eger hakyky taslamalarda ulanmak barada gürleşsek). XML hakda aýratyn leksiýamyz bar .

BSON (ikilik JSON)

Adyndan görnüşi ýaly, JSON-a gaty meňzeýär, ýöne adam okalmaýar we ikilik formatda işleýär. Bu şekilleri we beýleki goşundylary saklamak we geçirmek üçin örän amatly edýär. Mundan başga-da, BSON JSON-da ýok käbir maglumat görnüşlerini goldaýar. Mysal üçin, senäni (millisekunt formatda) ýa-da hatda JavaScript kodunyň bir bölegini BSON faýlyna ýazyp bilersiňiz. Meşhur NoSQL maglumat bazasy MongoDB maglumatlary BSON görnüşinde saklaýar.

Positionerleşiş protokoly

Käbir ýagdaýlarda berlen maglumatlaryň mukdaryny ep-esli azaltmalydyrys (mysal üçin, maglumatlar köp bolsa we ýüküň azaldylmagy zerur). Bu ýagdaýda, pozisiýa esaslanýan protokoly ulanyp bileris , ýagny parametrleriň atlaryny görkezmezden parametr bahalaryny geçirip bileris.
"Leo Tolstoy" | "Anna Karenina" | 1873
Bu formatdaky maglumatlar doly hukukly JSON faýlyndan has az ýer tutýar. Elbetde, beýleki seriallaşdyrma formatlary hem bar, ýöne şu wagt hemmesini bilmegiň zerurlygy ýok :) Programmany ösdürmek üçin häzirki wagtda pudak standarty bolan formatlar bilen tanyş bolmak we olaryň artykmaçlyklaryny we biri-birinden tapawudyny ýada salmak gowy zat. . Leksiýamyz gutardy :) Şu gün birnäçe meseläni çözmegi ýatdan çykarmaň! Ýene görüşeris! :)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION