CodeGym /Blog Java /rawak /Format siri Java
John Squirrels
Tahap
San Francisco

Format siri Java

Diterbitkan dalam kumpulan
Hai! Mari kita bercakap tentang bersiri. Anda mungkin masih ingat bahawa kami telah pun mendapat pelajaran tentang penyiaran. Dan begitulah kami lakukan :) Inilah yang pertama Dan inilah yang kedua. Jika anda tidak ingat dengan baik cara penyirian berfungsi, mengapa penyirian diperlukan, dan alat apa yang Java ada untuk penyirian, anda boleh menjalankan pelajaran ini. Pelajaran hari ini adalah mengenai teori. Kami akan melihat lebih dekat pada format bersiri. Mula-mula, mari kita ingat semula apa itu bersiri. Serialisasi ialah proses menyimpan keadaan objek dalam urutan bait. Deserialisasi ialah proses memulihkan objek daripada bait ini. Objek Java boleh disiri dan dihantar melalui rangkaian (contohnya, ke komputer lain). Urutan bait boleh diwakili dalam format yang berbeza. Anda sudah biasa dengan konsep ini daripada penggunaan komputer biasa. Sebagai contoh, buku elektronik (atau dokumen teks ringkas) boleh ditulis dalam sekumpulan format yang berbeza:
  • docx (format Microsoft Word);
  • pdf (format Adobe);
  • mobi (biasa digunakan pada peranti Amazon Kindle);
  • dan banyak lagi (ePub, djvu, fb2, dll.).
Dalam setiap kes, objektifnya nampaknya sama: bentangkan teks dalam bentuk yang boleh dibaca manusia. Namun, orang ramai telah mencipta banyak format yang berbeza. Tanpa pergi ke butiran kerja mereka, kita boleh mengandaikan bahawa mereka mempunyai alasan yang baik. Setiap format mempunyai kelebihan dan kekurangan tersendiri berbanding yang lain. Mungkin pelbagai format bersiri dicipta mengikut prinsip yang sama ini? Tekaan yang sangat baik, pelajar! :) Betul sekali. Realitinya ialah menghantar data melalui wayar (atau secara wayarles) adalah perniagaan yang rumit, dan ia melibatkan banyak faktor. Siapa yang menghantar data? Kemana? isipadu berapa? Adakah penerima akan menjadi manusia atau komputer (iaitu sekiranya data boleh dibaca manusia)? Peranti apakah yang akan membaca data? Jelas sekali, situasi ini berbeza. Adalah satu perkara untuk menghantar imej 500 KB dari satu telefon pintar ke telefon pintar yang lain. Dan ini adalah perkara yang sama sekali berbeza jika kita bercakap tentang 500 terabait data perniagaan yang mesti dimampatkan secara optimum dan dihantar secepat mungkin. Mari kita berkenalan dengan format bersiri utama dan pertimbangkan kelebihan dan kekurangan setiap daripada mereka!

JSON

Notasi Objek JavaScript. Anda sudah tahu serba sedikit tentang format ini! Kami membincangkannya dalam pelajaran ini , dan kami membincangkan penyirian ke JSON di sini . Ia mendapat namanya atas sebab tertentu. Objek Java yang ditukar kepada JSON sebenarnya kelihatan sama seperti objek dalam JavaScript. Anda tidak perlu tahu JavaScript untuk memahami objek kami:

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Kami tidak terhad kepada menghantar satu objek. Format JSON juga boleh mewakili pelbagai objek:

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

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
Oleh kerana JSON mewakili objek JavaScript, ia menyokong format data JavaScript berikut:
  • rentetan;
  • nombor;
  • objek;
  • tatasusunan;
  • boolean (benar dan salah);
  • null.
Apakah faedah JSON?
  1. Format yang boleh dibaca manusia. Ini adalah kelebihan yang jelas jika pengguna akhir anda adalah manusia. Sebagai contoh, katakan pelayan anda mempunyai pangkalan data dengan jadual penerbangan. Seorang pelanggan manusia, duduk di komputernya di rumah, meminta data daripada pangkalan data ini menggunakan aplikasi web. Kerana anda perlu menyediakan data dalam format yang dia boleh fahami, JSON ialah penyelesaian yang hebat.

  2. Kesederhanaan. Ia sangat mudah :) Di atas, kami memberikan contoh dua fail JSON. Dan walaupun anda belum pernah mendengar tentang JavaScript (apatah lagi objek JavaScript), anda boleh memahami jenis objek yang diterangkan di sana dengan mudah.
    Keseluruhan dokumentasi JSON terdiri daripada halaman web dengan beberapa gambar.

  3. Penggunaan meluas. JavaScript ialah bahasa front-end yang dominan, dan ia mempunyai keperluannya sendiri. Menggunakan JSON adalah satu kemestian. Oleh itu, sejumlah besar perkhidmatan web menggunakan JSON sebagai format pertukaran data. Setiap IDE moden menyokong format JSON (termasuk IntelliJ IDEA). Sekumpulan perpustakaan telah ditulis untuk semua jenis bahasa pengaturcaraan untuk membolehkan bekerja dengan JSON.

Sebagai contoh, anda telah pun bekerja dengan perpustakaan Jackson dalam pelajaran di mana kami belajar untuk mensirikan objek Java ke dalam JSON. Tetapi selain Jackson, kami mempunyai, sebagai contoh, GSON , yang merupakan perpustakaan yang sangat mudah daripada Google.

YAML

Pada mulanya, YAML bermaksud "Yet Another Markup Language". Apabila ia bermula, ia diletakkan sebagai pesaing kepada XML. Kini, dengan peredaran masa, YAML telah membawa maksud "YAML Ain't Markup Language". Apa sebenarnya? Bayangkan kita perlu mencipta 3 kelas untuk mewakili watak dalam permainan komputer: Warrior, Mage dan Thief. Mereka akan mempunyai ciri-ciri berikut: kekuatan, ketangkasan, ketahanan, satu set senjata. Beginilah rupa fail YAML yang menerangkan kelas kami:

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 pada yang lain. Kami boleh mengawal sarang menggunakan bilangan ruang tertentu, yang kami gunakan untuk menandakan setiap tahap. Apakah kelebihan format YAML?
  1. Boleh dibaca manusia. Sekali lagi, walaupun melihat fail YAML tanpa penerangan, anda boleh memahami objek yang diterangkan dengan mudah. YAML sangat mudah dibaca oleh manusia sehingga laman web yaml.org ialah fail YAML biasa :)

  2. Kekompakan. Struktur fail dibuat menggunakan ruang: tidak perlu menggunakan kurungan atau tanda petikan.

  3. Sokongan untuk struktur data asli untuk bahasa pengaturcaraan. Kelebihan besar YAML berbanding JSON dan banyak format lain ialah ia menyokong pelbagai struktur data. Mereka termasuk:

    • !!map
      Satu set pasangan nilai kunci yang tidak tertib yang tidak boleh mempunyai pendua;

    • !!map
      Urutan tertib pasangan nilai kunci yang tidak boleh mempunyai pendua;

    • !!pasangan:
      Urutan tertib pasangan nilai kunci yang boleh mempunyai pendua;

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

    • !!seq
      Urutan nilai arbitrari;

    Anda akan mengenali beberapa struktur ini dari Java! :) Ini bermakna pelbagai struktur data daripada bahasa pengaturcaraan boleh disirikan ke dalam YAML.

  4. Keupayaan untuk menggunakan sauh dan alias

    Penanda ini membolehkan anda mengenal pasti beberapa elemen dalam fail YAML, dan kemudian merujuknya dalam seluruh fail jika ia berlaku berulang kali. Sauh dibuat menggunakan simbol & , dan alias dibuat menggunakan * .

    Katakan kita mempunyai fail yang menerangkan buku oleh Leo Tolstoy. Untuk mengelak daripada menulis nama pengarang bagi setiap buku, kami hanya mencipta 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 fail ini dihuraikan, nilai "Leo Tolstoy" digantikan di tempat yang betul di mana kami mempunyai alias kami.

  5. YAML boleh membenamkan data dalam format lain. 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 adalah berdasarkan pokok tag.

<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 yang sama baiknya dengan JSON dan YAML (jika kita bercakap tentang projek sebenar). Kami mempunyai pelajaran berasingan tentang XML .

BSON (JSON binari)

Seperti namanya, BSON sangat serupa dengan JSON, tetapi ia tidak boleh dibaca manusia dan menggunakan data binari. Akibatnya, ia sangat baik untuk menyimpan dan memindahkan imej dan lampiran lain. Selain itu, BSON menyokong beberapa jenis data yang tidak tersedia dalam JSON. Sebagai contoh, fail BSON boleh memasukkan tarikh (dalam format milisaat) atau bahkan sekeping kod JavaScript. Pangkalan data MongoDB NoSQL yang popular menyimpan maklumat dalam format BSON.

Protokol berasaskan kedudukan

Dalam sesetengah situasi, kita perlu mengurangkan jumlah data yang dihantar secara drastik (contohnya, jika kita mempunyai banyak data dan perlu mengurangkan beban). Dalam keadaan ini, kita boleh menggunakan protokol berasaskan kedudukan, iaitu menghantar nilai parameter tanpa nama parameter itu sendiri.

"Leo Tolstoy" | "Anna Karenina" | 1873
Data dalam format ini mengambil beberapa kali kurang ruang daripada fail JSON penuh. Sudah tentu, terdapat format bersiri lain, tetapi anda tidak perlu mengetahui semuanya sekarang :) Alangkah baiknya jika anda sudah biasa dengan format standard industri semasa semasa membangunkan aplikasi, dan ingat kelebihannya serta cara ia berbeza daripada satu. yang lain. Dan dengan ini, pelajaran kami berakhir :) Jangan lupa untuk menyelesaikan beberapa tugas hari ini! Sehingga kali seterusnya! :)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION