CodeGym /Java Blog /Random /Mga format ng serialization ng Java
John Squirrels
Antas
San Francisco

Mga format ng serialization ng Java

Nai-publish sa grupo
Hi! Pag-usapan natin ang serialization. Marahil ay naaalala mo na mayroon na tayong mga aralin sa serialization. At kaya namin ginawa :) Narito ang una At narito ang pangalawa. Kung hindi mo maalala kung paano gumagana ang serialization, bakit kailangan ang serialization, at kung anong mga tool ang Java para sa serialization, maaari mong patakbuhin ang mga araling ito. Ang aralin ngayon ay tungkol sa teorya. Susuriin natin ang mga format ng serialization. Una, alalahanin natin kung ano ang serialization. Ang serialization ay ang proseso ng pag-iimbak ng estado ng isang bagay sa isang pagkakasunud-sunod ng mga byte. Ang deserialization ay ang proseso ng pagpapanumbalik ng isang bagay mula sa mga byte na ito. Ang isang Java object ay maaaring i-serialize at ipadala sa isang network (halimbawa, sa isa pang computer). Ang pagkakasunud-sunod ng mga byte ay maaaring katawanin sa iba't ibang mga format. Pamilyar ka sa konseptong ito mula sa ordinaryong paggamit ng computer. Halimbawa, ang isang elektronikong aklat (o isang simpleng dokumento ng teksto) ay maaaring isulat sa isang grupo ng iba't ibang mga format:
  • docx (format ng Microsoft Word);
  • pdf (Adobe format);
  • mobi (karaniwang ginagamit sa mga aparatong Amazon Kindle);
  • at marami pang iba (ePub, djvu, fb2, atbp.).
Sa bawat kaso, ang layunin ay tila pareho: ipakita ang teksto sa isang form na nababasa ng tao. Gayunpaman, ang mga tao ay nag-imbento ng maraming iba't ibang mga format. Nang hindi isasaalang-alang ang mga detalye ng kanilang trabaho, maaari nating ipagpalagay na mayroon silang magandang dahilan. Ang bawat format ay may sariling mga pakinabang at disadvantages kumpara sa iba. Marahil ang iba't ibang mga format ng serialization ay nilikha na sumusunod sa parehong mga prinsipyo? Napakahusay na hula, mag-aaral! :) Sakto lang. Ang katotohanan ay ang pagpapadala ng data sa pamamagitan ng wire (o wireless) ay nakakalito na negosyo, at nagsasangkot ito ng maraming salik. Sino ang nagpapadala ng data? Saan? Anong volume? Ang tatanggap ba ay isang tao o isang computer (ibig sabihin, ang data ay nababasa ng tao)? Anong device ang magbabasa ng data? Malinaw, ang mga sitwasyong ito ay naiiba. Isang bagay na magpadala ng 500 KB na imahe mula sa isang smartphone patungo sa isa pa. At ito ay isang ganap na naiibang bagay kung pinag-uusapan natin ang tungkol sa 500 terabytes ng data ng negosyo na dapat na mahusay na mai-compress at maipadala sa lalong madaling panahon. Kilalanin natin ang mga pangunahing format ng serialization at isaalang-alang ang mga pakinabang at disadvantages ng bawat isa sa kanila!

JSON

JavaScript Object Notation. Alam mo na ang kaunti tungkol sa format na ito! Napag-usapan namin ito sa araling ito , at tinakpan namin ang serialization sa JSON dito mismo . Nakuha nito ang pangalan nito para sa isang dahilan. Ang mga bagay sa Java na na-convert sa JSON ay talagang kamukha ng mga bagay sa JavaScript. Hindi mo kailangang malaman ang JavaScript upang maunawaan ang aming bagay:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Hindi kami limitado sa pagpapadala ng isang bagay. Ang format ng JSON ay maaari ding kumatawan sa isang hanay ng mga bagay:

[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

 {
   "title": "Demons",
   "author": "Fyodor Dostoyevsky",
   "year": 1872
 },

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Dahil kinakatawan ng JSON ang mga object ng JavaScript, sinusuportahan nito ang mga sumusunod na format ng data ng JavaScript:
  • mga string;
  • numero;
  • mga bagay;
  • arrays;
  • booleans (true at false);
  • wala.
Ano ang mga pakinabang ng JSON?
  1. Nababasa ng tao na format. Ito ay isang malinaw na bentahe kung ang iyong end user ay tao. Halimbawa, ipagpalagay na ang iyong server ay may database na may iskedyul ng mga flight. Ang isang tao na customer, na nakaupo sa kanyang computer sa bahay, ay humihiling ng data mula sa database na ito gamit ang isang web application. Dahil kailangan mong magbigay ng data sa isang format na naiintindihan niya, ang JSON ay isang mahusay na solusyon.

  2. pagiging simple. Ito ay sobrang simple :) Sa itaas, nagbigay kami ng isang halimbawa ng dalawang JSON file. At kahit na hindi mo pa naririnig ang tungkol sa JavaScript (pabayaan ang mga bagay na JavaScript), madali mong mauunawaan ang uri ng mga bagay na inilalarawan doon.
    Ang kabuuan ng dokumentasyon ng JSON ay binubuo ng isang webpage na may ilang larawan.

  3. Malawakang paggamit. Ang JavaScript ay ang nangingibabaw na front-end na wika, at mayroon itong sariling mga kinakailangan. Ang paggamit ng JSON ay kinakailangan. Samakatuwid, isang malaking bilang ng mga serbisyo sa web ang gumagamit ng JSON bilang format ng palitan ng data. Sinusuportahan ng bawat modernong IDE ang format na JSON (kabilang ang IntelliJ IDEA). Isang grupo ng mga aklatan ang naisulat para sa lahat ng uri ng mga programming language upang paganahin ang pagtatrabaho sa JSON.

Halimbawa, nakatrabaho mo na ang Jackson library sa isang aralin kung saan natutunan naming i-serialize ang mga object ng Java sa JSON. Ngunit bukod sa Jackson, mayroon kaming, halimbawa, GSON , na isang napaka-maginhawang library mula sa Google.

YAML

Sa una, ang YAML ay nakatayo para sa "Yet Another Markup Language". Noong nagsimula ito, nakaposisyon ito bilang isang katunggali sa XML. Ngayon, sa paglipas ng panahon, ang YAML ay naging "YAML Ain't Markup Language". Ano ba talaga ito? Isipin natin na kailangan nating lumikha ng 3 klase upang kumatawan sa mga character sa isang laro sa computer: Warrior, Mage, at Thief. Magkakaroon sila ng mga sumusunod na katangian: lakas, liksi, tibay, isang hanay ng mga armas. Narito kung ano ang magiging hitsura ng isang YAML file na naglalarawan sa aming mga klase:

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
Ang isang YAML file ay may istraktura ng puno: ang ilang mga elemento ay naka-nest sa iba. Maaari naming kontrolin ang nesting gamit ang isang tiyak na bilang ng mga puwang, na ginagamit namin upang tukuyin ang bawat antas. Ano ang mga pakinabang ng format na YAML?
  1. Nababasa ng tao. Muli, kahit na makakita ng YAML file na walang paglalarawan, madali mong mauunawaan ang mga bagay na inilalarawan nito. Ang YAML ay nababasa ng tao na ang website na yaml.org ay isang ordinaryong YAML file :)

  2. Ang pagiging compact. Ang istraktura ng file ay nilikha gamit ang mga puwang: hindi na kailangang gumamit ng mga bracket o panipi.

  3. Suporta para sa mga istruktura ng native na data para sa mga programming language. Ang malaking bentahe ng YAML sa JSON at maraming iba pang mga format ay sinusuportahan nito ang iba't ibang istruktura ng data. Kabilang sa mga ito ang:

    • !!map
      Isang hindi nakaayos na hanay ng mga pares ng key-value na hindi maaaring magkaroon ng mga duplicate;

    • !!map
      Isang nakaayos na pagkakasunud-sunod ng mga pares ng key-value na hindi maaaring magkaroon ng mga duplicate;

    • !!pares:
      Isang nakaayos na pagkakasunud-sunod ng mga pares ng key-value na maaaring magkaroon ng mga duplicate;

    • !!set
      Isang hindi ayos na pagkakasunud-sunod ng mga halaga na hindi katumbas ng bawat isa;

    • !!seq
      Isang pagkakasunud-sunod ng mga di-makatwirang halaga;

    Makikilala mo ang ilan sa mga istrukturang ito mula sa Java! :) Nangangahulugan ito na ang iba't ibang istruktura ng data mula sa mga programming language ay maaaring i-serialize sa YAML.

  4. Kakayahang gumamit ng anchor at alias

    Nagbibigay-daan sa iyo ang mga marker na ito na tukuyin ang ilang elemento sa isang YAML file, at pagkatapos ay i-refer ito sa natitirang bahagi ng file kung paulit-ulit itong nangyayari. Ang isang anchor ay nilikha gamit ang simbolo na & , at isang alias ay nilikha gamit ang * .

    Ipagpalagay na mayroon kaming isang file na naglalarawan sa mga libro ni Leo Tolstoy. Upang maiwasan ang pagsusulat ng pangalan ng may-akda para sa bawat aklat, ginagawa lang namin ang leo anchor at tinutukoy ito gamit ang isang alias kapag kailangan namin ito:

    
    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
    

    Kapag na-parse ang file na ito, ang value na "Leo Tolstoy" ay papalitan sa mga tamang lugar kung saan mayroon tayong mga alias.

  5. Maaaring mag-embed ng data ang YAML sa ibang mga format. Halimbawa, 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
            }
          ]
    

Iba pang mga format ng serialization

XML

Ang format na ito ay batay sa isang tag tree.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Ang bawat elemento ay binubuo ng pambungad at pagsasara na tag (<> at </>). Ang bawat elemento ay maaaring magkaroon ng mga nested na elemento. Ang XML ay isang karaniwang format na kasing ganda ng JSON at YAML (kung totoong mga proyekto ang pinag-uusapan natin). Mayroon kaming hiwalay na aralin tungkol sa XML .

BSON (binary JSON)

Gaya ng ipinahihiwatig ng pangalan nito, ang BSON ay halos kapareho sa JSON, ngunit hindi ito nababasa ng tao at gumagamit ng binary data. Bilang resulta, ito ay napakahusay para sa pag-iimbak at paglilipat ng mga larawan at iba pang mga attachment. Bilang karagdagan, sinusuportahan ng BSON ang ilang uri ng data na hindi available sa JSON. Halimbawa, ang isang BSON file ay maaaring magsama ng petsa (sa millisecond na format) o kahit isang piraso ng JavaScript code. Ang sikat na database ng MongoDB NoSQL ay nag-iimbak ng impormasyon sa BSON na format.

Protocol na nakabatay sa posisyon

Sa ilang sitwasyon, kailangan nating bawasan nang husto ang dami ng data na ipinadala (halimbawa, kung marami tayong data at kailangan nating bawasan ang load). Sa sitwasyong ito, maaari naming gamitin ang protocol na nakabatay sa posisyon, iyon ay, magpadala ng mga halaga ng parameter nang walang mga pangalan ng mga parameter mismo.

"Leo Tolstoy" | "Anna Karenina" | 1873
Ang data sa format na ito ay tumatagal ng ilang beses na mas kaunting espasyo kaysa sa isang buong JSON file. Siyempre, may iba pang mga format ng serialization, ngunit hindi mo kailangang malaman ang lahat ng mga ito sa ngayon :) Mabuti kung pamilyar ka sa kasalukuyang mga standard na format ng industriya kapag bumubuo ng mga application, at tandaan ang kanilang mga pakinabang at kung paano sila naiiba sa isa. isa pa. At kasama nito, magtatapos ang ating aralin :) Huwag kalimutang lutasin ang ilang gawain ngayon! Hanggang sa muli! :)
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION