JavaRush /Blog Java /Random-MS /Format Serialisasi dalam Java

Format Serialisasi dalam Java

Diterbitkan dalam kumpulan
hello! Mari kita bincangkan tentang bersiri dalam Java. Anda mungkin masih ingat bahawa kami telah pun mengadakan kuliah mengenai bersiri. Betul :) Inilah yang pertama Dan inilah yang kedua Jika anda tidak ingat dengan baik cara penyirian berfungsi, mengapa ia diperlukan, dan apakah alat yang ada untuknya di Jawa, anda boleh membaca ceramah ini. Kuliah hari ini akan bersifat teori, dan di dalamnya kita akan melihat lebih dekat pada format bersiri. Format siri dalam Java - 1Mula-mula, mari kita ingat apa itu bersiri. Serialisasi ialah proses menyimpan keadaan objek ke dalam urutan bait. Deserialisasi ialah proses membina semula objek daripada bait ini. Objek Java boleh disiri dan dipindahkan melalui rangkaian (contohnya, ke komputer lain). Jadi, jujukan bait yang sama ini boleh diwakili dalam format yang berbeza. Anda sudah biasa dengan ini daripada penggunaan komputer setiap hari. Contohnya, e-book (atau dokumen teks ringkas) yang anda baca boleh ditulis dalam sekumpulan format yang berbeza:
  • docx (format Microsoft Word);
  • pdf (format Adobe);
  • mobi (biasa digunakan dalam peranti Amazon Kindle);
  • dan banyak lagi (ePub, djvu, fb2...).
Nampaknya tugasnya adalah sama: untuk membentangkan teks dalam bentuk yang boleh dibaca manusia. Tetapi orang ramai telah mencipta sejumlah besar format. Walaupun tanpa pergi ke butiran kerja mereka, kita boleh mengandaikan bahawa ini dilakukan atas sebab tertentu. Setiap daripada mereka mungkin mempunyai kelebihan dan kekurangan tersendiri berbanding yang lain. Mungkin format bersiri dicipta mengikut prinsip yang sama? Baiklah, tekaan yang baik, pelajar! :) Caranya. Hakikatnya ialah menghantar data pada jarak jauh adalah perkara yang agak rumit, dan terdapat banyak faktor di dalamnya. Siapa yang menghantar data? di mana? isipadu berapa? Adakah pihak yang menerima adalah orang atau mesin (iaitu, adakah data boleh dibaca manusia)? Apakah jenis peranti yang akan membaca data? Jelas sekali, situasi berbeza. Ini satu perkara apabila anda perlu memindahkan imej 500KB dari satu telefon pintar ke telefon pintar yang lain. Dan ia sama sekali berbeza apabila kita bercakap tentang 500 terabait data perniagaan yang perlu dimampatkan secekap mungkin dan pada masa yang sama dipindahkan secepat mungkin. Mari kita lihat format bersiri utama dan lihat kelebihan dan kekurangan setiap satu!

JSON

Notasi Objek JavaScript. Awak dah kenal sikit dengan dia! Kami bercakap mengenainya dalam kuliah ini , dan kami melihat pesirilan dalam JSON di sini . Ia mendapat namanya atas sebab tertentu. Objek Java yang ditukar kepada JSON sebenarnya kelihatan sama seperti objek JavaScript. Anda tidak perlu tahu JavaScript untuk memahami maksud objek kami:
{
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
}
Tidak perlu melepasi satu objek. JSON juga boleh mengandungi pelbagai objek:
[
 {
   "title": "Война и мир",
   "author": "Лев Толстой",
   "year": 1869
 },

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

 {
   "title": "Чайка",
   "author": "Антон Чехов",
   "year": 1896
 }
]
Memandangkan JSON ialah objek JavaScript, ia menyokong format data JavaScript berikut:
  • rentetan;
  • nombor (nombor);
  • objek (objek);
  • tatasusunan (susunan);
  • nilai boolean (benar dan salah);
  • null.
Apakah kelebihan yang ada pada JSON?
  1. Format yang boleh dibaca manusia. Ini adalah kelebihan yang jelas jika pengguna akhir anda adalah manusia. Contohnya, pelayan anda menyimpan pangkalan data dengan jadual penerbangan. Pelanggan manusia meminta data daripada pangkalan data ini menggunakan aplikasi web sambil duduk di rumah di hadapan komputer. Memandangkan anda perlu menyediakan data dalam format yang dia boleh fahami, JSON ialah penyelesaian yang hebat.

  2. Kesederhanaan. Anda boleh katakan ia adalah asas :) Di atas kami memberikan contoh dua fail JSON. Dan walaupun anda tidak pernah mendengar tentang kewujudan JavaScript (apatah lagi objeknya), anda boleh dengan mudah memahami jenis objek yang diterangkan di sana.
    Keseluruhan dokumentasi JSON ialah satu halaman web dengan beberapa gambar.

  3. Berleluasa. JavaScript ialah bahasa front-end yang dominan, dan ia menentukan syarat-syaratnya. Menggunakan JSON adalah satu kemestian. Oleh itu, sejumlah besar perkhidmatan web menggunakan JSON sebagai format untuk bertukar-tukar data. Setiap IDE moden menyokong format JSON (termasuk Intellij IDEA). Sekumpulan perpustakaan telah ditulis untuk bekerja dengan JSON untuk semua bahasa pengaturcaraan yang mungkin.

Sebagai contoh, anda telah bekerja dengan perpustakaan Jackson dalam kuliah di mana kami belajar mensirikan objek Java ke dalam JSON. Tetapi selain Jackson terdapat, sebagai contoh, GSON - perpustakaan yang sangat mudah daripada Google.

YAML

Pada permulaan kewujudannya, ia bermaksud Yet Another Markup Language - "bahasa penanda lain." Pada masa itu ia diletakkan sebagai pesaing kepada XML. Kini, selepas peredaran masa, ia adalah singkatan kepada “YAML Ain't Markup Language” (“YAML is not a markup language”). Dia macam mana? Bayangkan kita perlu mencipta 3 kelas watak untuk permainan komputer kita: Warrior, Mage dan Thief. Mereka akan mempunyai ciri-ciri berikut: kekuatan, ketangkasan, ketahanan, dan satu set senjata. Beginilah rupa fail YAML kami dengan penerangan kelas:
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
Fail YAML mempunyai struktur pokok: beberapa elemen bersarang dalam yang lain. Kita boleh mengawal sarang dengan menggunakan bilangan ruang tertentu untuk menandakan setiap tahap. Apakah kelebihan format YAML?
  1. Boleh dibaca manusia. Sekali lagi, walaupun anda melihat fail yaml tanpa penerangan, anda boleh memahami objek yang diterangkan di sana dengan mudah. YAML ialah sejauh mana kebolehbacaan manusia bahawa halaman utama yaml.org ialah fail yaml biasa :)

  2. Kekompakan. Struktur fail dibentuk oleh ruang: tidak perlu menggunakan kurungan atau petikan.

  3. Sokongan untuk struktur data asli kepada bahasa pengaturcaraan. Kelebihan besar YAML berbanding JSON dan banyak format lain ialah ia menyokong struktur data yang berbeza. Antaranya:

    • !!map
      Koleksi tidak tertib pasangan kunci:nilai tanpa kemungkinan pendua;

    • !!map
      Urutan tersusun bagi pasangan kunci:nilai tanpa kemungkinan pendua;

    • !!pair:
      Urutan tersusun bagi pasangan kunci:nilai dengan kemungkinan pendua;

    • !!set
      Urutan nilai yang tidak tertib yang tidak sama antara satu sama lain;

    • !!seq
      Urutan nilai arbitrari;

    Beberapa struktur ini akan anda kenali dari Jawa! :) Terima kasih kepada ciri ini, anda boleh menyusun pelbagai struktur data daripada bahasa pengaturcaraan ke dalam format YAML.

  4. Keupayaan untuk menggunakan sauh dan alias

    Terjemahan perkataan "anchor" dan "alias" - "anchor" dan "pseudonim". Pada dasarnya, ia menerangkan dengan tepat intipati istilah ini dalam YAML.

    Mereka membenarkan anda mengenal pasti elemen dalam fail yaml, dan merujuknya dalam seluruh fail jika ia berlaku berulang kali. Anchor dibuat menggunakan simbol &dan alias dibuat menggunakan *.

    Katakan kita mempunyai fail dengan penerangan tentang buku Leo Tolstoy. Untuk mengelak daripada menulis nama pengarang secara manual setiap kali, kami hanya akan membuat sauh "leo" dan merujuknya menggunakan alias apabila kami memerlukannya:

    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

    Apabila kami membaca fail ini dengan beberapa penghurai, nilai "Leo Tolstoy" akan digantikan di tempat yang betul menggantikan alias kami.

  5. Anda boleh membenamkan data dalam format lain dalam YAML. Sebagai contoh, 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
            }
          ]

Format bersiri lain

XML

Format ini berdasarkan pokok teg yang dipanggil.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Setiap elemen terdiri daripada teg pembuka dan penutup (<> dan </>). Setiap elemen boleh mempunyai elemen bersarang. XML ialah format biasa, tidak kalah dengan JSON dan YAML (jika kita bercakap tentang penggunaan dalam projek sebenar). Kami mempunyai kuliah berasingan tentang XML .

BSON (JSON binari)

Seperti namanya, ia sangat serupa dengan JSON, tetapi tidak boleh dibaca manusia dan beroperasi pada data dalam format binari. Ini menjadikannya sangat mudah untuk menyimpan dan memindahkan imej dan lampiran lain. Selain itu, BSON menyokong beberapa jenis data yang tidak tersedia dalam JSON. Sebagai contoh, anda boleh menulis tarikh (dalam format milisaat) atau sekeping kod JavaScript ke dalam fail BSON. Pangkalan data NoSQL yang popular MongoDB menyimpan maklumat dalam format BSON.

Protokol berasaskan kedudukan

Dalam sesetengah situasi, kita perlu mengurangkan secara mendadak jumlah data yang dipindahkan (contohnya, jika terdapat banyak data dan kita perlu mengurangkan beban). Dalam keadaan ini, kita boleh menggunakan protokol berasaskan kedudukan , iaitu, lulus nilai parameter tanpa nama parameter itu sendiri.
"Leo Tolstoy" | "Anna Karenina" | 1873
Data dalam format ini mengambil lebih sedikit ruang daripada fail JSON yang lengkap. Sudah tentu, terdapat format bersiri lain, tetapi anda tidak perlu mengetahui semuanya sekarang :) Adalah baik untuk membiasakan diri dengan format yang kini menjadi standard industri untuk pembangunan aplikasi, dan mengingati kelebihan dan perbezaannya antara satu sama lain . Dan kuliah kami telah sampai ke penghujungnya :) Jangan lupa selesaikan beberapa masalah hari ini! Jumpa lagi! :)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION