CodeGym/Java Blogu/Rastgele/Java serileştirme biçimleri
John Squirrels
Seviye
San Francisco

Java serileştirme biçimleri

grupta yayınlandı
MERHABA! Serileştirme hakkında konuşalım. Serileştirme üzerine zaten derslerimiz olduğunu muhtemelen hatırlıyorsunuzdur. Ve öyle yaptık :) İşte birinci Ve işte ikinci. Serileştirmenin nasıl çalıştığını, serileştirmenin neden gerekli olduğunu ve Java'nın serileştirme için hangi araçlara sahip olduğunu iyi hatırlamıyorsanız, bu dersleri gözden geçirebilirsiniz. Bugünün dersi teori hakkında olacak. Serileştirme biçimlerine daha yakından bakacağız. Öncelikle serileştirmenin ne olduğunu hatırlayalım. Serileştirme, bir nesnenin durumunu bir bayt dizisinde saklama işlemidir. Serileştirme, bir nesneyi bu baytlardan geri yükleme işlemidir. Bir Java nesnesi serileştirilebilir ve bir ağ üzerinden (örneğin, başka bir bilgisayara) gönderilebilir. Bayt dizisi farklı biçimlerde gösterilebilir. Bu kavrama sıradan bilgisayar kullanımından aşinasınızdır. Örneğin, bir elektronik kitap (veya basit bir metin belgesi) bir grup farklı biçimde yazılabilir:
  • docx (Microsoft Word biçimi);
  • pdf (Adobe formatı);
  • mobi (yaygın olarak Amazon Kindle cihazlarında kullanılır);
  • ve çok daha fazlası (ePub, djvu, fb2, vb.).
Her durumda amaç aynı görünüyor: metni insan tarafından okunabilir bir biçimde sunmak. Yine de, insanlar pek çok farklı biçim icat ettiler. Yaptıkları işin detaylarına girmeden haklı sebepleri olduğunu varsayabiliriz. Her formatın diğerlerine kıyasla kendi avantajları ve dezavantajları vardır. Belki de bu aynı ilkeler izlenerek çeşitli serileştirme formatları oluşturulmuştur? Mükemmel tahmin, öğrenci! :) Aynen öyle. Gerçek şu ki, bir kablo üzerinden (veya kablosuz olarak) veri göndermek zor bir iştir ve birçok faktörü içerir. Verileri kim gönderiyor? Nereye? Hangi hacim? Alıcı bir insan mı yoksa bilgisayar mı olacak (veriler insanlar tarafından okunabilir olmalı)? Verileri hangi cihaz okuyacak? Açıkçası, bu durumlar farklıdır. Bir akıllı telefondan diğerine 500 KB'lik bir görüntü göndermek bir şeydir. Optimum şekilde sıkıştırılması ve olabildiğince çabuk gönderilmesi gereken 500 terabaytlık iş verisinden bahsediyorsak, bu tamamen farklı bir şeydir. Ana serileştirme formatlarını tanıyalım ve her birinin avantajlarını ve dezavantajlarını ele alalım!

JSON

JavaScript Nesnesi Gösterimi. Bu format hakkında zaten biraz bilgi sahibisiniz! Bu derste bunun hakkında konuştuk ve JSON'da serileştirmeyi burada ele aldık . Adını bir nedenle aldı. JSON'a dönüştürülen Java nesneleri, aslında tam olarak JavaScript'teki nesneler gibi görünür. Nesnemizi anlamak için JavaScript bilmenize gerek yok:
{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
Tek bir nesne göndermekle sınırlı değiliz. JSON biçimi ayrıca bir dizi nesneyi de temsil edebilir:
[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

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

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
JSON, JavaScript nesnelerini temsil ettiğinden, aşağıdaki JavaScript veri biçimlerini destekler:
  • Teller;
  • sayılar;
  • nesneler;
  • diziler;
  • mantıksal değerler (doğru ve yanlış);
  • hükümsüz.
JSON'un faydaları nelerdir?
  1. İnsan tarafından okunabilir format. Son kullanıcınız insansa bu bariz bir avantajdır. Örneğin, sunucunuzun bir uçuş programı içeren bir veritabanı olduğunu varsayalım. Evinde bilgisayarının başında oturan bir insan müşteri, bir web uygulaması kullanarak bu veri tabanından veri talep ediyor. Verileri onun anlayabileceği bir biçimde sağlamanız gerektiğinden, JSON harika bir çözümdür.

  2. Basitlik. Çok basit :) Yukarıda iki JSON dosyası örneği verdik. JavaScript hakkında bir şey duymamış olsanız bile (JavaScript nesnelerini bırakın), orada açıklanan nesne türlerini kolayca anlayabilirsiniz.
    JSON belgelerinin tamamı, birkaç resim içeren bir web sayfasından oluşur.

  3. Yaygın kullanım. JavaScript baskın ön uç dilidir ve kendi gereksinimleri vardır. JSON kullanmak bir zorunluluktur. Bu nedenle, çok sayıda web hizmeti, veri değişim formatı olarak JSON'u kullanır. Her modern IDE, JSON biçimini destekler (IntelliJ IDEA dahil). JSON ile çalışmayı sağlamak için her türden programlama dili için bir sürü kitaplık yazılmıştır.

Örneğin, Java nesnelerini JSON'a seri hale getirmeyi öğrendiğimiz bir derste Jackson kitaplığıyla zaten çalıştınız. Ancak Jackson'ın yanı sıra, örneğin Google'dan çok uygun bir kitaplık olan GSON'a sahibiz.

YAML

Başlangıçta YAML, "Yine Başka Bir Biçimlendirme Dili" anlamına geliyordu. Başladığında, XML'e rakip olarak konumlandırıldı. Şimdi, zaman geçtikçe YAML, "YAML İşaretleme Dili Değildir" anlamına gelir. Tam olarak nedir? Bir bilgisayar oyunundaki karakterleri temsil etmek için 3 sınıf oluşturmamız gerektiğini düşünelim: Savaşçı, Büyücü ve Hırsız. Şu özelliklere sahip olacaklar: güç, çeviklik, dayanıklılık, bir dizi silah. Sınıflarımızı açıklayan bir YAML dosyası şöyle görünür:
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
Bir YAML dosyasının bir ağaç yapısı vardır: bazı öğeler diğerlerinin içinde iç içe geçmiştir. Her seviyeyi belirtmek için kullandığımız belirli sayıda boşluk kullanarak yuvalamayı kontrol edebiliriz. YAML formatının avantajları nelerdir?
  1. İnsan tarafından okunabilir. Yine, bir YAML dosyasını açıklama olmadan görseniz bile, tanımladığı nesneleri kolayca anlayabilirsiniz. YAML o kadar okunabilir ki yaml.org web sitesi sıradan bir YAML dosyası :)

  2. kompaktlık Dosya yapısı boşluklar kullanılarak oluşturulur: parantez veya tırnak işareti kullanmaya gerek yoktur.

  3. Programlama dilleri için yerel veri yapıları desteği. YAML'nin JSON ve diğer birçok biçime göre en büyük avantajı, çeşitli veri yapılarını desteklemesidir. Onlar içerir:

    • !!map
      Yinelenenleri olmayan, sıralanmamış bir anahtar-değer çiftleri kümesi;

    • !omap
      Yinelenenleri olmayan sıralı bir anahtar-değer çiftleri dizisi;

    • !!çiftler:
      Yinelemeleri olabilen sıralı bir anahtar/değer çiftleri dizisi;

    • !!set
      Birbirine eşit olmayan sırasız bir değerler dizisi;

    • !seq
      Bir rastgele değerler dizisi;

    Bu yapılardan bazılarını Java'dan tanıyacaksınız! :) Bu, programlama dillerinden çeşitli veri yapılarının YAML'de serileştirilebileceği anlamına gelir.

  4. Çapa ve takma ad kullanabilme

    Bu işaretçiler, bir YAML dosyasındaki bazı öğeleri tanımlamanıza ve ardından tekrar tekrar meydana gelirse dosyanın geri kalanında ona başvurmanıza olanak tanır. & sembolü kullanılarak bir bağlantı oluşturulur ve * kullanılarak bir takma ad oluşturulur .

    Leo Tolstoy'un kitaplarını anlatan bir dosyamız olduğunu varsayalım. Her kitap için yazarın adını yazmaktan kaçınmak için, basitçe aslan çapasını yaratırız ve ihtiyacımız olduğunda bir takma ad kullanarak ona başvururuz:

    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 dosya ayrıştırıldığında, takma adlarımızın bulunduğu doğru yerlerde "Leo Tolstoy" değeri değiştirilir.

  5. YAML, verileri diğer biçimlerde gömebilir. Örneğ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
            }
          ]

Diğer serileştirme biçimleri

xml

Bu biçim, bir etiket ağacına dayalıdır.
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Her öğe bir açılış ve kapanış etiketinden (<> ve </>) oluşur. Her eleman iç içe elemanlara sahip olabilir. XML, JSON ve YAML kadar iyi olan yaygın bir biçimdir (eğer gerçek projelerden bahsediyorsak). XML hakkında ayrı bir dersimiz var .

BSON (ikili JSON)

Adından da anlaşılacağı gibi BSON, JSON'a çok benzer, ancak insanlar tarafından okunamaz ve ikili veri kullanır. Sonuç olarak, görüntüleri ve diğer ekleri depolamak ve aktarmak için çok iyidir. Ayrıca BSON, JSON'da bulunmayan bazı veri türlerini destekler. Örneğin, bir BSON dosyası bir tarih (milisaniye biçiminde) veya hatta bir parça JavaScript kodu içerebilir. Popüler MongoDB NoSQL veritabanı, bilgileri BSON biçiminde depolar.

Konum tabanlı protokol

Bazı durumlarda, gönderilen veri miktarını büyük ölçüde azaltmamız gerekir (örneğin, çok fazla verimiz varsa ve yükü azaltmamız gerekiyorsa). Bu durumda, konum tabanlı protokolü kullanabiliriz, yani parametrelerin adları olmadan parametre değerleri gönderebiliriz.
"Leo Tolstoy" | "Anna Karenina" | 1873
Bu formattaki veriler, tam bir JSON dosyasından birkaç kat daha az yer kaplar. Elbette başka serileştirme formatları da var ama şu anda hepsini bilmenize gerek yok :) Uygulama geliştirirken mevcut endüstri standardı formatlara aşina olmanız ve bunların avantajlarını ve birinden ne kadar farklı olduklarını hatırlamanız iyi olur. bir diğer. Ve bununla dersimiz sona eriyor :) Bugün birkaç görev çözmeyi unutmayın! Bir sonrakine kadar! :)
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok