Serileştirme nedir?


149

Nesneye Yönelik Programlama (OOP) ile başlıyorum ve bilmek istiyorum: OOP parlance serileştirmenin anlamı nedir?


Ayrıca serileştirme kodunu
Nipuna

4
Bu makale tam BS, dolayısıyla derecesi.
RedAces

Google'da yapılan bir arama anında yanıt vereceğinden, genellikle kaldırılan çok geniş sorular değil mi?
arvymetal

2
@arvymetal haklıydın. Bu googled zaman ilk sonuç oldu :) Ve tam olarak ne aradığını oldu
R_G

Yanıtlar:


143

Serileştirme, bellekteki bir nesneyi bayt akışına dönüştürme işlemidir, böylece diske depolamak veya ağ üzerinden göndermek gibi şeyler yapabilirsiniz.

Deserialization ters işlemdir: bayt akışını bellekteki bir nesneye dönüştürmek.


46
Ayrıca, fiiller Marshalve Unmarshaleş anlamlı Serializeve Deserialize.
wulfgarpro

4
Bellekteki bir nesne zaten en düşük düzeyde bayt olarak temsil edilmiyor mu?
mahacoder

3
Bellekteki bir nesne derleyici, işletim sistemi ve / veya donanım tarafından biçimlendirilir. Derleyicinizi ve biçiminizi değiştirin. Serileştirilmiş bir nesnenin kodunuz tarafından tanımlanan bir biçimi olacaktır, böylece biçimi garanti edebilirsiniz. Bu, ağ üzerinden nesne gönderirken de yararlıdır - alıcı makine tamamen farklı bir mimariye (ve dolayısıyla bellek içi gösterime) sahip olabilir.
Andrew Barnett

1
Yani onu bir dizeye mi çeviriyor?
NoName

1
Bir dize geçerli bir biçim olabilir, ancak bir dize olması gerekmez. Dizelerin kendileri farklı formatlara sahiptir (ASCII, UTF8, UTF16, EBCDIC ...) ve aslında konsepti oldukça iyi gösterirler. Dize (bir bellek içi nesne) abc, 0x61 0x62 0x63(ASCII) veya 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) olarak serileştirilir - NUL sonlandırıcıları veya kodlanmış uzunluklar gibi veya bunlar olmadan.
Andrew Barnett

91

Basitçe ifade etmek gerekirse Serileştirme , bir Nesneyi bayt akışına dönüştürme işlemidir, böylece bir ağ üzerinden aktarılabilir veya kalıcı bir depoda saklanabilir.

Diziselleştirme tam tersidir - Ağ veya kalıcılık deposundan bir bayt akışı alın ve aynı duruma sahip Nesneye geri dönüştürün .

Anlaşılması gereken şey, bu bayt akışının nasıl yorumlandığını veya manipüle edildiğini, böylece aynı Nesne / aynı durumu elde ettiğimizi. Bunu başarmanın çeşitli yolları vardır. Onlardan bazıları -

  1. XML : Nesneyi XML'ye dönüştürün, bir ağ üzerinden aktarın veya bir dosya / db'de saklayın. Onu alın ve aynı durumdaki nesneye geri dönüştürün. Java'da JAXB (XML bağlama için Java mimarisi) kitaplığını kullanıyoruz. (Java 6'dan JDK ile birlikte gelir).
  2. JSON : Nesne JSON'a (JavaScript Nesnesi notasyonu) dönüştürülerek de yapılabilir . Yine bunun için kullanılabilecek GSON kütüphanesi var.
  3. Veya OOP dilinin sağladığı Serialization'u kullanabiliriz. Örneğin, Java'da bir Nesneyi uygulayarak seri haline getirebilir Serializable interfaceve Nesne Akışı'na yazabilirsiniz.

@AniketThakur Çok iyi bir açıklama, JSONsıfırdan öğrenmem için bir link de verebilir misiniz , çünkü hakkında hiçbir şey bilmiyorum
Kasun Siyambalapitiya

Serileştirme hakkında her konuştuğumuzda neden daima sadece Object'e başvuruyoruz. Ağ üzerinden aktarmak için dosyaları kullanmak yerine herhangi bir nesnemiz olmadığı Fonksiyonel Dilde serileştirmeyi kullanamaz mıyız?
Pardeep Sharma

1
Her şeyden önce, bir nesneyi neden bayt ve geri akışına dönüştürmemiz gerekiyor? Neden bunu yapmaya çalışan bir kullanıcı için örtük bir işlem değil?
Aparna Chaganti

1
JSON veya XML kullanabilirsek, neden bunları bayt akışına dönüştürmeye ihtiyacımız var veya söylemeliyiz? Ve sonra onları sadece baytlara dönüştürmek yerine JSOn veya XML'de depolarız.
Muhammad Faizan Fareed

78

Resim ile Basit Açıklama:

Rex, köpeğim, serileştirildi!

Analoji ile Açıklama:

Diyelim ki telefonda arkadaşımla konuşuyorum ve ona yeni köpek yavrusu hakkında söylüyorum.

İşte benim sorunum: köpek yavrusu yaşayan, nefes alan bir memelidir. Nasıl bir köpek yavrusu telefon hattı üzerinden taşımak için? Yavru köpeğimi fiziksel olarak telefon alıcımın içine koyamıyorum.

Bunun yerine, köpek yavrusu temsilini telefon üzerinden iletmem gerekecek. Başka bir deyişle, köpeğimi Rex'i serileştirdim ve ona Rex'in serileştirilmiş versiyonunu telefon hattı üzerinden gönderiyorum:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

Mükemmel bir temsil - köpeğimin bir serileştirmesi.

Özet:

Serileştirme temel olarak köpeğimi Rex'i başka bir şeye (JSON nesnesi) dönüştürmek anlamına gelir, bu da telefon hattı üzerinden 1s ve 0s serisi olarak taşınabilir. NYC'deki arkadaşım daha sonra bu 1'leri ve 0'ları bir JSON nesnesine çevirebilir - böylece köpeğimin Rex'inin mükemmel bir temsilcisine sahip olur.


16

Şuna bir bakın, bu size iyi bir açıklama verecektir:

http://en.wikipedia.org/wiki/Serialization

Serileştirmenin en yaygın kullanımının, bir veritabanında / dosyada depolanabilmesi veya bir web hizmeti çağrısında ağ üzerinden gönderilebilmesi için bir ikili nesnenin XML (veya başka bir dize) gösterimine dönüştürülmesi ile ilgili olduğunu düşünüyorum. Deserialization ters işlemdir - XML ​​/ dizgiyi bir nesneye geri dönüştürür.

EDIT: Karşılaşabileceğiniz başka bir terim marshalling / unmarshalling. Marshalling temel olarak serileştirme ile aynı kavramdır ve uyumsuzluk deserialize etme ile aynıdır.


3
Mutlaka sadece XML değil, herhangi bir temsil, hatta ikili temsil bile olabilir
Matthew Farwell

7

Serileştirme, nesneyi depolamak veya belleğe, veritabanına veya bir dosyaya iletmek için bir nesneyi bayt akışına dönüştürme işlemidir . Temel amacı, gerektiğinde onu yeniden oluşturabilmek için bir nesnenin durumunu kaydetmektir. Tersine işleme serileştirme denir.

...

Bu şekilde genel serileştirme süreci gösterilmektedir

Genel serileştirme süreci

...

Serileştirme yoluyla bir geliştirici, nesneyi bir Web Hizmeti aracılığıyla uzak bir uygulamaya göndermek, bir nesneyi bir etki alanından diğerine geçirmek, bir nesneyi güvenlik duvarından XML dizesi olarak geçirmek veya güvenliği veya kullanıcıya özgü tutmak gibi eylemler gerçekleştirebilir uygulamalar arasında bilgi

Gönderen https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(benimkini vurgula)


5

Serileştirme , sırasız verileri (bir nesne gibi), daha sonra orijinal verileri yeniden yapılandırmak için kullanılabilecek bir dizi token'a dönüştürme işlemidir . Serileştirilmiş form çoğunlukla bir metin dizesidir, ancak olması gerekmez.


2

serileştirme bir nesneyi depolanabilir bit dizisine dönüştürüyor.

böylece bu diziyi bir dosyaya kaydedebilir, db veya ağ üzerinden gönderebilirsiniz.

daha sonra gerçek nesnenin serisini kaldırabilir ve istediğiniz zaman yeniden kullanabilirsiniz.

Web Hizmetleri ve AJAX serileştirmenin en yaygın örneğidir. İstemciye yanıt göndermeden önce nesneler serileştirildi.


1

serileştirme, java destekli nesneyi dosya destekli forma aktarmaktan başka bir şey değildir

                         (OR)

Java destekli formu ağ destekli forma dönüştürme ... serileştirmenin ana kapsamı, verileri bir katmandan başka bir katmana aktarmaktan başka bir şey değildir ... sadece ağ üzerinden gönderebileceğimiz serileştirilmiş nesneler ..


1

Serileştirme, Java, C # veya başka (OOP dilleri) desteklenen bir nesneyi taşınabilir bir forma dönüştürme işlemidir. Bu şekilde ağ üzerinden taşınır veya bir diskte saklanır. Bir sınıfın serileştirilebilmesi için serileştirilebilir arabirim uygulaması gerekir.


sadece Java veya C # ile sınırlı kalmaz, çoğu programlama dilinde serileştirme kullanırız. Örneğin python turşu modülü için aynı kullanılır.
Pardeep Sharma

0

Serileştirme, verileri doğrusal bir bayt dizisine dönüştürüyor.

Diğerleri aşağı yukarı aynı şeyi söylediler, ancak bilgisayar modellerinin verilerin tek boyutlu olarak ele alınan RAM'e veya kalıcı depolama alanına sığmasını gerektirdiğini vurguluyorum.

"Veri" olan çoğu şey doğası gereği serileştirilebilirdir (soyut modeli doğrusal bir biçime indirmeniz gerekse bile); serileştirilemez bir ağ bağlantısı veya ayrıştırıcı gibi karmaşık bir durum tabanlı makine söylenir.


0

serileştirmenin ikili bir nesneyi bir XML (veya başka bir dize) temsiline dönüştürmeyle ilgisi vardır, böylece bir veritabanında / dosyada saklanabilir veya bir web servis çağrısında ağ üzerinden gönderilebilir. Deserialization ters işlemdir - XML ​​/ dizgiyi bir nesneye geri dönüştürür.


0

Gerçek nesneyi (şey) bir sınıftan (plan) somutlaştırırken (inşa ederken), nesneyi (şey) serileştirerek (temel atomik yapısına bölerek) bellekteki bir boşluğa kaydetmeye ihtiyaç vardır. (Star Treks Transporter gibi). Bir yere aktarılabilecek ve depolanabilecek bilgi akışını parçalara ayırıyorsunuz. Sonra şeyi yeniden yapılandırmak istediğinizde, sadece atomik olarak saklanan örneği nesneye geri çekersiniz. Anlamadan farklı.


0

Serileştirme, bir nesneyi ikili veri akışına dönüştürme işlemidir, böylece bir dosyada saklanabilir veya aynı nesneye geri döndürülebileceği bir ağ üzerinden gönderilebilir.

Bu belge, Java serileştirmesini ayrıntılı olarak anlamanıza yardımcı olmalıdır.


-1

Serileştirme, nesnenin durumunun dosyaya kaydedilebildiği durumlarda (örnek olarak) nesnenin (bellek yığını) bir forma çevrildiği zamandır.

Sadece kurabiye yapmak gibi davranın - nesne bir hamur, kurabiye - serileştirilmiş bir hamurdur.

Yani "serileştirerek" arkadaşınıza çerez gönderebilirsiniz.

Bunun gibi bir şey :-)


4
... ancak çerezler tekrar hamur haline getirilemez (serileştirilmiş).
Dave Sherohman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.