SerialVersionUID nedir ve neden kullanmal─▒y─▒m?


Al─▒nan cevaba git


Eclipse serialVersionUID , bir eksik oldu─čunda uyar─▒lar verir .

Serile┼čtirilebilir s─▒n─▒f Foo, uzun bir statik final serialVersionUID alan─▒ bildirmiyor

Nedir serialVersionUID ve neden ├Ânemlidir? L├╝tfen eksik olan─▒n serialVersionUID soruna neden olaca─č─▒ bir ├Ârnek g├Âsterin .


2850









Cevap say─▒s─▒n─▒ say: 24






Dok├╝manlar java.io.Serializable muhtemelen alabilece─činiz en iyi a├ž─▒klamalarla ilgilidir:

Serile┼čtirme ├žal─▒┼čma zaman─▒, serile┼čtirme serialVersionUID s─▒ras─▒nda serile┼čtirilmi┼č bir nesnenin g├Ândericisinin ve al─▒c─▒s─▒n─▒n serile┼čtirmeyle uyumlu olan s─▒n─▒flar i├žin y├╝kl├╝ olan s─▒n─▒flar─▒ oldu─čunu do─črulamak i├žin seri hale getirme s─▒ras─▒nda kullan─▒lan ve a ad─▒ verilen bir s├╝r├╝m numaras─▒ ile ili┼čkilendirilir . Al─▒c─▒, serialVersionUID kar┼č─▒l─▒k gelen g├Ânderenin s─▒n─▒f─▒ndan farkl─▒ bir nesne i├žin bir s─▒n─▒f y├╝klediyse, seri kald─▒rma i┼člemi bir sonu├ž verir InvalidClassException . Serile┼čtirilebilir bir s─▒n─▒f, statik, final ve t├╝r olmas─▒ gereken serialVersionUID bir alan bildirerek a├ž─▒k├ža kendi ilan─▒n─▒ verebilir : serialVersionUID long

 ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
 

Serile┼čtirilebilir bir s─▒n─▒f a├ž─▒k├ža bir a├ž─▒klama yapmazsa serialVersionUID , serile┼čtirme ├žal─▒┼čma zaman─▒ serialVersionUID , Java (TM) Nesne Serile┼čtirme Belirtimi'nde a├ž─▒kland─▒─č─▒ gibi, s─▒n─▒f─▒n ├že┼čitli y├Ânlerine g├Âre bu s─▒n─▒f i├žin varsay─▒lan bir de─čer hesaplar . Bununla birlikte, varsay─▒lan serile┼čtirilebilir s─▒n─▒flar─▒n derleyici uygulamalar─▒na ba─čl─▒ olarak de─či┼čiklik g├Âsterebilecek ve bu nedenle seri kald─▒rma s─▒ras─▒nda beklenmeyen sonu├žlara neden olabilecek s─▒n─▒f ayr─▒nt─▒lar─▒na son derece duyarl─▒ oldu─ču i├žin, a├ž─▒k├ža serile┼čtirilebilir t├╝m s─▒n─▒flar─▒n a├ž─▒k├ža de─čer bildirmesi ├Ânerilir . Bu nedenle, farkl─▒ java derleyici uygulamalar─▒ aras─▒nda tutarl─▒ bir de─čeri garanti etmek i├žin serile┼čtirilebilir bir s─▒n─▒f─▒n a├ž─▒k bir de─čer bildirmesi gerekir . Ayr─▒ca kesin olarak tavsiye edilir. serialVersionUID serialVersionUID InvalidClassExceptions serialVersionUID serialVersionUID serialVersionUID bildirimler m├╝mk├╝n oldu─čunda ├Âzel de─či┼čtiriciyi kullan─▒r, ├ž├╝nk├╝ bu bildirimler yaln─▒zca derhal bildiren s─▒n─▒f serialVersionUID alanlar─▒ i├žin ge├žerlidir , kal─▒tsal ├╝yeler olarak yararl─▒ de─čildir.


2180







E─čer sadece uygulaman─▒n iyili─či i├žin serile┼čtirmeniz gerekti─činden serile┼čtiriyorsan─▒z ( HTTPSession ├Ârne─čin, e─čerÔÇŽ saklanm─▒┼č olsun veya olmas─▒n, muhtemelen de-serializing bir form nesnesini umursamaman─▒z umrunda olursan─▒z). Bunu yoksay.

Asl─▒nda seri hale getirmeyi kullan─▒yorsan─▒z, yaln─▒zca do─črudan seri hale getirmeyi kullanarak nesneleri kaydetmeyi ve almay─▒ planl─▒yorsan─▒z ├Ânemlidir. serialVersionUID S─▒n─▒f s├╝r├╝m├╝n├╝ temsil eder ve s─▒n─▒f─▒n g├╝ncel s├╝r├╝m├╝ geriye ├Ânceki s├╝r├╝m├╝ ile uyumlu de─čilse bunu artmal─▒d─▒r.

├ço─ču zaman, do─črudan seri hale getirme kullanmayacaks─▒n─▒z. Bu durumda, SerialVersionUID h─▒zl─▒ d├╝zeltme se├žene─čini t─▒klatarak bir varsay─▒lan olu┼čturun ve endi┼čelenmeyin.


453







Josh Bloch'un Effective Java adl─▒ kitab─▒n─▒ (2. Bask─▒) ├ž─▒karmak i├žin bu f─▒rsat─▒ yakalayam─▒yorum . B├Âl├╝m 11, Java serile┼čtirme konusunda vazge├žilmez bir kaynakt─▒r.

Josh ba┼č─▒na, otomatik olarak olu┼čturulan UID, bir s─▒n─▒f ad─▒na, uygulanan aray├╝zlere ve t├╝m genel ve korunan ├╝yelere dayal─▒ olarak ├╝retilir. Bunlardan herhangi birini de─či┼čtirmek, herhangi bir ┼čekilde de─či┼čecektir serialVersionUID . Dolay─▒s─▒yla, yaln─▒zca s─▒n─▒f─▒n birden fazla s├╝r├╝m├╝n├╝n serile┼čtirilmeyece─činden eminseniz (i┼člemler aras─▒nda veya daha sonraki bir zamanda depolama alan─▒ndan al─▒naca─č─▒ndan) emin olman─▒z gerekir.

┼×imdilik onlar─▒ g├Ârmezden gelirseniz ve daha sonra s─▒n─▒f─▒ bir ┼čekilde de─či┼čtirmeniz, ancak s─▒n─▒f─▒n eski s├╝r├╝mleriyle uyumlulu─ču koruman─▒z gerekti─čini ├Â─črenirseniz serialVersionUID , eski s─▒n─▒f─▒ olu┼čturmak i├žin JDK arac─▒ serivericisini kullanabilir ve a├ž─▒k├ža yeni s─▒n─▒fta. (De─či┼čikliklerinize ba─čl─▒ olarak, ├Âzel seri hale getirme ekleyerek writeObject ve readObject y├Ântemlerle de uygulaman─▒z gerekebilir - bkz. Serializable Javadoc veya yukar─▒da belirtilen 11. b├Âl├╝m).


293







Eclipse'e ┼ču serialVersionUID uyar─▒lar─▒n─▒ yoksaymas─▒n─▒ s├Âyleyebilirsiniz:

Pencere> Tercihler> Java> Derleyici> Hatalar / Uyar─▒lar> Potansiyel Programlama Problemleri

Bilmiyorsan─▒z, bu b├Âl├╝mde etkinle┼čtirebilece─činiz bir├žok uyar─▒ var (hatta baz─▒lar─▒ hata olarak bildirilmi┼č olsa da), ├žo─ču ├žok yararl─▒d─▒r:

  • Potansiyel Programlama Problemleri: Muhtemel yanl─▒┼čl─▒kla boole tahsisi
  • Potansiyel Programlama Problemleri: Bo┼č i┼čaret├ži eri┼čimi
  • Gereksiz kod: Yerel de─či┼čken asla okunmaz
  • Gereksiz kod: Gereksiz bo┼č denetim
  • Gereksiz kod: Gereksiz oyuncular veya 'an─▒nda'

ve daha fazlas─▒.


131







serialVersionUID Serile┼čtirilmi┼č verilerin versiyonlanmas─▒n─▒ kolayla┼čt─▒r─▒r. Serile┼čtirme s─▒ras─▒nda de─čeri verilerle birlikte kaydedilir. Serile┼čtirme i┼čleminde, serile┼čtirilmi┼č verinin ge├žerli kodla nas─▒l e┼čle┼čti─čini g├Ârmek i├žin ayn─▒ s├╝r├╝m denetlenir.

Verilerinizi s├╝r├╝mlendirmek istiyorsan─▒z, normalde serialVersionUID 0'dan ba┼člayarak , seri hale getirilmi┼č verileri de─či┼čtiren (ge├žici olmayan alanlar ekleyerek veya kald─▒rarak) s─▒n─▒f─▒n─▒zdaki her yap─▒sal de─či┼čiklikle ├žarp─▒n.

Yerle┼čik seri hale getirme mekanizmas─▒ ( in.defaultReadObject() ), verilerin eski s├╝r├╝mlerinden serile┼čtirilmeyi reddeder. Ancak isterseniz eski verileri okuyabilen kendi readObject () i┼člevini tan─▒mlayabilirsiniz . Bu ├Âzel kod daha sonra serialVersionUID verilerin hangi s├╝r├╝mde oldu─čunu bilmek ve verilerin nas─▒l seri hale getirilece─čine karar vermek i├žin kontrol edebilir. Bu s├╝r├╝m olu┼čturma tekni─či, kodunuzun birka├ž s├╝r├╝m├╝nde hayatta kalan serile┼čtirilmi┼č verileri saklarsan─▒z kullan─▒┼čl─▒d─▒r.

Ancak seri hale getirilmi┼č verileri bu kadar uzun bir s├╝re boyunca saklamak ├žok yayg─▒n de─čildir. Seri hale getirme mekanizmas─▒n─▒, ├Ârne─čin bir ├Ânbelle─če ge├žici olarak veri yazmak veya a─č ├╝zerinden kod taban─▒n─▒n ilgili b├Âl├╝mlerinin ayn─▒ s├╝r├╝m├╝ne sahip ba┼čka bir programa g├Ândermek i├žin kullanmak ├žok daha yayg─▒nd─▒r.

Bu durumda geriye d├Ân├╝k uyumluluk sa─člamakla ilgilenmiyorsunuz. Yaln─▒zca ileti┼čimde bulunan kod tabanlar─▒n─▒n, ilgili s─▒n─▒flar─▒n ayn─▒ s├╝r├╝mlerine sahip oldu─čundan emin olmakla ilgileniyorsunuz. B├Âyle bir kontrol├╝ kolayla┼čt─▒rmak i├žin, serialVersionUID t─▒pk─▒ eskisi gibi devam etmeli ve s─▒n─▒flar─▒n─▒zda de─či┼čiklik yaparken g├╝ncellemeyi unutmamal─▒s─▒n─▒z.

Alan─▒ g├╝ncellemeyi unutursan─▒z, farkl─▒ bir yap─▒ya sahip ancak ayn─▒ olan bir s─▒n─▒f─▒n iki farkl─▒ s├╝r├╝m├╝yle kar┼č─▒la┼čabilirsiniz serialVersionUID . Bu olursa, varsay─▒lan mekanizma ( in.defaultReadObject() ) herhangi bir fark alg─▒lamaz ve uyumsuz verileri seri hale getirmeye ├žal─▒┼č─▒r. ┼×imdi kriptik bir ├žal─▒┼čma zaman─▒ hatas─▒ veya sessiz hatayla (bo┼č alanlar) bitebilir. Bu t├╝r hatalar─▒ bulmak zor olabilir.

Bu y├╝zden bu usecase'e yard─▒m etmek i├žin Java platformu size serialVersionUID manuel olarak ayar yapmama se├žene─či sunar . Bunun yerine, derleme zaman─▒nda s─▒n─▒f yap─▒s─▒n─▒n bir karmas─▒ ├╝retilecek ve id olarak kullan─▒lacakt─▒r. Bu mekanizma, ayn─▒ kimli─če sahip farkl─▒ s─▒n─▒f yap─▒lar─▒na sahip olmad─▒─č─▒n─▒zdan emin olacak ve bu nedenle, bu izlemesi zor ├žal─▒┼čma zaman─▒ serile┼čtirme hatalar─▒n─▒ yukar─▒da belirtmeyeceksiniz.

Ancak otomatik olarak olu┼čturulan kimlik stratejisinin arka taraf─▒ vard─▒r. Yani, ayn─▒ s─▒n─▒f i├žin ├╝retilen kimlikleri derleyiciler aras─▒nda farkl─▒l─▒k g├Âsterebilir (yukar─▒da Jon Skeet taraf─▒ndan belirtildi─či gibi). Bu nedenle seri hale getirilmi┼č verileri farkl─▒ derleyicilerle derlenmi┼č kodlar aras─▒nda iletirseniz, kimlikleri yine de manuel olarak tutman─▒z ├Ânerilir.

Ayr─▒ca, belirtilen ilk kullan─▒m durumundaki gibi verilerinizle geriye d├Ân├╝k olarak uyumluysan─▒z, muhtemelen kimli─či de korumak istersiniz. Bu, okunabilir kimlikleri elde etmek ve ne zaman ve nas─▒l de─či┼čtikleri ├╝zerinde daha fazla kontrole sahip olmak i├žin.


109







SerialVersionUID nedir ve neden kullanmal─▒y─▒m?

SerialVersionUID Her s─▒n─▒f i├žin benzersiz bir tan─▒mlay─▒c─▒d─▒r JVM , ayn─▒ s─▒n─▒f─▒n Serile┼čtirme s─▒ras─▒nda kullan─▒ld─▒─č─▒ndan emin olarak s─▒n─▒f─▒n s├╝r├╝mlerini kar┼č─▒la┼čt─▒rmak i├žin kullan─▒r.

Birini belirlemek, daha fazla kontrol sa─člar; ancak e─čer belirtmezseniz JVM bir tane ├╝retiyor. ├ťretilen de─čer, farkl─▒ derleyiciler aras─▒nda farkl─▒l─▒k g├Âsterebilir. Dahas─▒, bazen eski serile┼čtirilmi┼č nesnelerin [ backward incompatibility ] seri hale getirilmesini yasaklamak i├žin baz─▒ nedenlerden dolay─▒ istemeniz gerekir ve bu durumda serialVersionUID de─čerini de─či┼čtirmeniz gerekir.

─░├žin Javadocs Serializable s├Âz hakk─▒ndan :

varsay─▒lan serialVersionUID hesaplamas─▒, derleyici uygulamalar─▒na ba─čl─▒ olarak de─či┼čebilecek s─▒n─▒f ayr─▒nt─▒lar─▒na kar┼č─▒ olduk├ža hassast─▒r ve bu nedenle InvalidClassException seri kald─▒rma s─▒ras─▒nda beklenmeyen sonu├žlara neden olabilir .

Bu nedenle, bize daha fazla kontrol sa─člad─▒─č─▒ i├žin serialVersionUID de─čerini bildirmeniz gerekir .

Bu yaz─▒n─▒n konuyla ilgili baz─▒ iyi noktalar─▒ var.


68







Orijinal soru, 'neden ├Ânemlidir' sorusunu ve Serial Version ID bunun faydal─▒ olaca─č─▒ yerlerde '├Ârnek' sorusunu sordu . Ben bir tane buldum.

Bir Car s─▒n─▒f yaratt─▒─č─▒n─▒z─▒ , somutla┼čt─▒rd─▒─č─▒n─▒z─▒ ve bir nesne ak─▒┼č─▒na yazd─▒─č─▒n─▒z─▒ s├Âyleyin . D├╝zle┼čtirilmi┼č araba nesnesi bir s├╝re dosya sisteminde oturur. Bu arada e─čer Car s─▒n─▒f yeni bir alan ekleyerek de─či┼čtirilirse. Daha sonra, yass─▒la┼čt─▒r─▒lm─▒┼č Car nesneyi okumaya (├Ârne─čin seri hale getirmeye) ├žal─▒┼čt─▒─č─▒n─▒zda , java.io.InvalidClassException - - t├╝m serile┼čtirilebilir s─▒n─▒flara otomatik olarak benzersiz bir tan─▒mlay─▒c─▒ verildi─činden , bunu al─▒rs─▒n─▒z . Bu istisna, s─▒n─▒f─▒n tan─▒mlay─▒c─▒s─▒ d├╝zle┼čtirilmi┼č nesnenin tan─▒mlay─▒c─▒s─▒na e┼čit olmad─▒─č─▒nda at─▒l─▒r. Ger├žekten d├╝┼č├╝n├╝rseniz, yeni alan─▒n eklenmesi nedeniyle istisna at─▒l─▒r. A├ž─▒k bir serialVersionUID bildirerek, s├╝r├╝m├╝n├╝z├╝ kendiniz kontrol ederek bu istisnan─▒n ortaya ├ž─▒kmas─▒n─▒ ├Ânleyebilirsiniz. Ayr─▒ca, a├ž─▒k├ža ilan edilmesinde k├╝├ž├╝k bir performans avantaj─▒ vard─▒r serialVersionUID (├ž├╝nk├╝ hesaplanmas─▒ gerekmez). Dolay─▒s─▒yla, kendi serialVersionUID'nizi, a┼ča─č─▒da g├Âsterildi─či gibi olu┼čturdu─čunuz anda Seri hale getirilebilir s─▒n─▒flar─▒n─▒za eklemek en iyi y├Ântemdir:

 public class Car {
    static final long serialVersionUID = 1L; //assign a long value
}
 

56







Nesneleri hi├žbir zaman bayt dizisi i├žin seri hale getirmeniz ve onlar─▒ g├Ândermeniz / kaydetmeniz gerekmiyorsa, endi┼čelenmenize gerek yoktur. Bunu yaparsan─▒z, o zaman serialVersionUID adresinizi g├Âz ├Ân├╝nde bulundurmal─▒s─▒n─▒z, ├ž├╝nk├╝ nesnenin seri hale getiricisi onu s─▒n─▒f y├╝kleyicisinin sahip oldu─ču nesne s├╝r├╝m├╝yle e┼čle┼čtirecektir. Java Dil ├ľzellikleri'nde bunun hakk─▒nda daha fazla bilgi edinin.


36







E─čer bu s─▒n─▒fa seri hale getirme hakk─▒nda d├╝┼č├╝nmedi─činiz ve kendinizi ilan etmedi─činiz bir uyar─▒ al─▒rsan─▒z implements Serializable , bunun nedeni genellikle Serializable'─▒ uygulayan bir ├╝st s─▒n─▒ftan miras alman─▒zd─▒r. ├ço─ču zaman miras kullanmak yerine b├Âyle bir nesneye yetki vermek daha iyi olur.

Yani, yerine

 public class MyExample extends ArrayList<String> {

    public MyExample() {
        super();
    }
    ...
}
 

yap

 public class MyExample {
    private List<String> myList;

    public MyExample() {
         this.myList = new ArrayList<String>();
    }
    ...
}
 

ve ilgili y├Ântemlerde (veya ) myList.foo() yerine ├ža─čr─▒ yap─▒n . (Bu t├╝m durumlarda uymuyor, ancak yine de olduk├ža s─▒k.) this.foo() super.foo()

S─▒k s─▒k JFrame'i ya da b├Âyle bir ┼čeyi geni┼čleten insanlar─▒ g├Âr├╝yorum. (Bu ayn─▒ zamanda bir IDE'de otomatik tamamlamaya da yard─▒mc─▒ olur, ├ž├╝nk├╝ JFrame'in s─▒n─▒f─▒n─▒zdaki ├Âzel olanlar─▒ aramak istedi─činizde gerekmeyen y├╝zlerce y├Ântemi vard─▒r.)

Uyar─▒n─▒n (veya serialVersionUID) ka├ž─▒n─▒lmaz oldu─ču durumlardan biri, normal olarak ads─▒z bir s─▒n─▒fta AbstractAction'dan geni┼čletti─činizde, yaln─▒zca actionPerformed y├Ântemini eklemenizdir. Bu durumda bir uyar─▒ olmamas─▒ gerekti─čini d├╝┼č├╝n├╝yorum (├ž├╝nk├╝ normalde s─▒n─▒f─▒n─▒z─▒n farkl─▒ s├╝r├╝mlerinde bu t├╝r anonim s─▒n─▒flar─▒ g├╝venilir bir ┼čekilde seri hale getirip seri hale getiremezsiniz), ancak derleyicinin bunu nas─▒l tan─▒yabilece─činden emin de─čilim.


34







─░lk ├Ânce serile┼čtirmenin ne oldu─čunu a├ž─▒klamam gerekiyor.

Seri hale getirme , nesneyi a─č ├╝zerinden g├Ândermek i├žin bir nesneyi bir ak─▒┼ča d├Ân├╝┼čt├╝rmeye izin verir VEYA dosyaya kaydet VEYA harf kullan─▒m─▒ i├žin DB'ye kaydet.

Serile┼čtirme i├žin baz─▒ kurallar vard─▒r .

  • Bir nesne, yaln─▒zca s─▒n─▒f─▒ veya ├╝st s─▒n─▒f─▒ Seri hale getirilebilir arabirimi uygularsa serile┼čtirilebilir

  • Bir nesne, ├╝st s─▒n─▒f─▒ olmasa bile seri hale getirilebilir (Seri hale getirilebilir arabirimi uygular). Bununla birlikte, seri hale getirilebilir s─▒n─▒f─▒n hiyerar┼čisinde, seri hale getirilebilir bir arabirim uygulamam─▒┼č ilk ├╝st s─▒n─▒f, ba─č─▒ms─▒z bir yap─▒c─▒ya sahip olmamal─▒d─▒r. Bu ihlal edilirse, readObject () ├žal─▒┼čma zaman─▒nda bir java.io.InvalidClassException ├╝retecektir

  • T├╝m ilkel t├╝rler seri hale getirilebilir.

  • Ge├žici alanlar (ge├žici de─či┼čtiricili) serile┼čtirilmemi┼č (yani kaydedilmemi┼č veya geri y├╝klenmemi┼č). Seri hale getirilebilen bir s─▒n─▒f, seri hale getirmeyi desteklemeyen ge├žici s─▒n─▒f alanlar─▒n─▒ i┼čaretlemelidir (├Ârn. Bir dosya ak─▒┼č─▒).

  • Statik alanlar (statik de─či┼čtiriciyle) serile┼čtirilmez.

Ne zaman Object tefrika edilir Java Runtime, seri s├╝r├╝m numaras─▒ aka ili┼čkilendirir serialVersionID .

SerialVersionID ├╝r├╝n├╝ne ihtiya├ž duydu─čumuz yer: Serenderizasyon s─▒ras─▒nda g├Ânderenin ve al─▒c─▒n─▒n serile┼čtirme ile uyumlu oldu─čunu do─črulamak i├žin. E─čer al─▒c─▒ s─▒n─▒f─▒ farkl─▒ bir ┼čekilde serialVersionID y├╝klediyse, seri kald─▒rma ile sona erer InvalidClassCastException .
Serile┼čtirilebilir bir s─▒n─▒f,statik, final ve t├╝r uzunlu─čundaki serialVersionUID bir alan─▒nbildirilmesiylea├ž─▒k├žakendini ilan edebilir serialVersionUID .

Bunu bir ├Ârnekle deneyelim.

 import java.io.Serializable;    
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private String empname;
private byte empage;

public String getEmpName() {
    return name;
}
public void setEmpName(String empname) {
    this.empname = empname;
}
public byte getEmpAge() {
    return empage;
}
public void setEmpAge(byte empage) {
    this.empage = empage;
}

public String whoIsThis() {
    StringBuffer employee = new StringBuffer();
    employee.append(getEmpName()).append(" is ).append(getEmpAge()).append("
years old  "));
    return employee.toString();
}
}
 

Serile┼čtirme Nesnesi Olu┼čtur

 import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class Writer {
public static void main(String[] args) throws IOException {
    Employee employee = new Employee();
    employee.setEmpName("Jagdish");
    employee.setEmpAge((byte) 30);

    FileOutputStream fout = new 
FileOutputStream("/users/Jagdish.vala/employee.obj");
    ObjectOutputStream oos = new ObjectOutputStream(fout);
    oos.writeObject(employee);
    oos.close();
    System.out.println("Process complete");
}
}
 

Nesneyi serile┼čtir

 import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Reader {
public static void main(String[] args) throws ClassNotFoundException, 
IOException {
    Employee employee = new Employee();
    FileInputStream fin = new 
    FileInputStream("/users/Jagdish.vala/employee.obj");
    ObjectInputStream ois = new ObjectInputStream(fin);
    employee = (Employee) ois.readObject();
    ois.close();
    System.out.println(employee.whoIsThis());
 }
}    
 

NOT: ┼×imdi ├çal─▒┼čan s─▒n─▒f─▒n─▒n serialVersionUID de─čerini de─či┼čtirin ve ┼čunu kaydedin:

 private static final long serialVersionUID = 4L;
 

Ve Reader s─▒n─▒f─▒n─▒ y├╝r├╝t├╝n. Writer s─▒n─▒f─▒n─▒ ├žal─▒┼čt─▒rmak i├žin de─čil ve istisna alacaks─▒n─▒z.

 Exception in thread "main" java.io.InvalidClassException: 
com.jagdish.vala.java.serialVersion.Employee; local class incompatible: 
stream classdesc serialVersionUID = 1, local class serialVersionUID = 4
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1623)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at com.krishantha.sample.java.serialVersion.Reader.main(Reader.java:14)
 

33







SerialVersionUID alan─▒n ├Ânemini anlamak i├žin, Serile┼čtirme / Serile┼čtirmenin nas─▒l ├žal─▒┼čt─▒─č─▒n─▒ anlamak gerekir.

Seri hale getirilebilir bir s─▒n─▒f nesnesi serile┼čtirildi─činde Java Runtime, seri hale getirilmi┼č bir seri numaras─▒n─▒ (serialVersionUID olarak adland─▒r─▒l─▒r) bu serile┼čtirilmi┼č nesneyle ili┼čkilendirir. Bu serile┼čtirilmi┼č nesneyi serile┼čtirdi─činizde, Java Runtime, serile┼čtirilmi┼č nesnenin serialVersionUID'sini s─▒n─▒f─▒n serialVersionUID ile e┼čle┼čtirir. E─čer her ikisi de e┼čitse, sadece ba┼čka bir seriyi kald─▒rma s├╝reci devam ederse, ba┼čka InvalidClassException atar.

Bu nedenle, Serile┼čtirme / Serile┼čtirme i┼čleminin ba┼čar─▒l─▒ olmas─▒ i├žin serile┼čtirilmi┼č nesnenin serialVersionUID'sinin, s─▒n─▒f─▒n serialVersionUID de─čerine e┼čit olmas─▒ gerekti─či sonucuna vard─▒k. Programc─▒n─▒n programda serialVersionUID de─čerini a├ž─▒k├ža belirtmesi durumunda, ayn─▒ de─čer serile┼čtirme ve serile┼čtirme platformundan ba─č─▒ms─▒z olarak serile┼čtirilmi┼č nesne ve s─▒n─▒fla ili┼čkilendirilir (├Ârne─čin serile┼čtirme i├žin g├╝ne┼č pencereleri kullan─▒larak platformlar veya pencereler kullan─▒larak platformda yap─▒labilir. MS JVM ve Serile┼čtirme, Zing JVM kullanarak farkl─▒ platformlarda Linux'ta olabilir).

Ancak serialVersionUID, programlay─▒c─▒ taraf─▒ndan belirtilmezse, o zaman herhangi bir nesnenin Serialization \ DeSerialization i┼člemi yap─▒l─▒rken, Java ├žal─▒┼čma zaman─▒ onu hesaplamak i├žin kendi algoritmas─▒n─▒ kullan─▒r. Bu serialVersionUID hesaplama algoritmas─▒ bir JRE'den di─čerine de─či┼čir. Nesnenin serile┼čtirildi─či ortam─▒n bir JRE (├Ârn: SUN JVM) kullan─▒yor olmas─▒ ve seri kald─▒rma i┼čleminin ger├žekle┼čti─či ortam─▒n Linux Jvm (zing) kullan─▒lmas─▒ da m├╝mk├╝nd├╝r. Bu gibi durumlarda, serile┼čtirilmi┼č nesneyle ili┼čkili serialVersionUID, seri kald─▒rma ortam─▒nda hesaplanan s─▒n─▒f─▒n serialVersionUID de─čerinden farkl─▒ olacakt─▒r. S─▒ras─▒yla seri kald─▒rma ba┼čar─▒l─▒ olamayacak. Bu nedenle bu t├╝r durumlardan / sorunlardan ka├ž─▒nmak i├žin programc─▒ her zaman Serializable s─▒n─▒f─▒n─▒n serialVersionUID de─čerini belirtmelidir.


22







Rahats─▒z etmeyin, varsay─▒lan hesaplama ger├žekten iyidir ve vakalar─▒n% 99,9999'u i├žin yeterlidir. Ve sorunla kar┼č─▒la┼č─▒rsan─▒z, daha ├Ânce de belirtildi─či gibi UID'leri ihtiya├ž duyuldu─ču gibi sunabilirsiniz (ki bu pek olas─▒ de─čildir)


18







Eksik serialVersionUID'in bir soruna neden olabilece─či bir ├Ârnek gelince:

Bir EJB mod├╝l kullanan bir Web mod├╝l├╝nden olu┼čan bu Java EE uygulamas─▒ ├╝zerinde ├žal─▒┼č─▒yorum . Web mod├╝l├╝, EJB mod├╝l├╝ uzaktan ├ža─č─▒r─▒r ve ba─č─▒ms─▒z de─či┼čken olarak POJO uygulayanlar─▒ ge├žer Serializable .

Bu POJO's s─▒n─▒f, EJB kavanozunun i├žinde ve web mod├╝l├╝n├╝n WEB-INF / lib'sinde kendi kavanozunun i├žinde paketlenmi┼čtir. Bunlar asl─▒nda ayn─▒ s─▒n─▒ft─▒r, ancak EJB mod├╝l├╝n├╝ paketlerken, bu POJO'nun kavanozunu EJB mod├╝l├╝yle birlikte paketlemek i├žin paketinden ├ž─▒kard─▒m.

'A yap─▒lan ├ža─čr─▒ EJB a┼ča─č─▒daki istisna ile ba┼čar─▒s─▒z oldu, ├ž├╝nk├╝ ilan etmedim serialVersionUID :

 Caused by: java.io.IOException: Mismatched serialization UIDs : Source
 (Rep.
 IDRMI:com.hordine.pedra.softbudget.domain.Budget:5CF7CE11E6810A36:04A3FEBED5DA4588)
 = 04A3FEBED5DA4588 whereas Target (Rep. ID RMI:com.hordine.pedra.softbudget.domain.Budget:7AF5ED7A7CFDFF31:6227F23FA74A9A52)
 = 6227F23FA74A9A52
 

18







Genel serialVersionUID olarak bir ba─člamda kullan─▒r─▒m: Bildi─čimde Java VM'nin ba─člam─▒ndan ├ž─▒kaca─č─▒n─▒ biliyorum.

Bunu kulland─▒─č─▒mda ObjectInputStream ve ObjectOutputStream ba┼čvurum s─▒ras─▒nda veya kulland─▒─č─▒m bir k├╝t├╝phane / ├žer├ževe kulland─▒─č─▒m─▒ bildi─čimde bunu kullan─▒rd─▒m. SerialVersionID, farkl─▒ s├╝r├╝mlerdeki veya sat─▒c─▒lardaki farkl─▒ Java VM'lerinin do─čru ┼čekilde ├žal─▒┼čmas─▒n─▒ sa─člar veya VM d─▒┼č─▒nda saklan─▒r ve al─▒n─▒rsa, ├Ârne─čin HttpSession oturum verileri uygulama sunucusunun yeniden ba┼člat─▒lmas─▒ ve y├╝kseltilmesi s─▒ras─▒nda bile kalabilir.

Di─čer t├╝m durumlar i├žin kullan─▒yorum

 @SuppressWarnings("serial")
 

├ž├╝nk├╝ ├žo─ču zaman varsay─▒lan serialVersionUID yeterlidir. Bunlar aras─▒nda Exception , HttpServlet .


16







Alan verileri, s─▒n─▒fta depolanan baz─▒ bilgileri temsil eder. Class, Serializable aray├╝z├╝ uygular , b├Âylece serialVersionUID alan─▒ bildirmek i├žin otomatik olarak tutulmas─▒ ├Ânerilir . Burada ayarlanan 1 de─čeri ile ba┼člayal─▒m.

Bu uyar─▒n─▒n gelmesini istemiyorsan─▒z, ┼čunu kullan─▒n:

 @SuppressWarnings("serial")
 

14







E─čer CheckStyle, Serializable'─▒ uygulayan bir s─▒n─▒ftaki serialVersionUID'nin iyi bir de─čere sahip oldu─čunu, yani seri s├╝r├╝m kimli─či ├╝retecinin ├╝retece─či ile e┼čle┼čti─čini do─črularsa iyi olurdu. ├çok fazla say─▒da seri hale getirilebilir DTO'lu bir projeniz varsa, ├Ârne─čin, mevcut serialVersionUID'yi silip yeniden olu┼čturmay─▒ hat─▒rlamak bir ac─▒d─▒r ve ┼ču anda bunu do─črulaman─▒n tek yolu her s─▒n─▒f i├žin yeniden olu┼čturmak ve kar┼č─▒la┼čt─▒rmakt─▒r. eski olan. Bu ├žok ├žok ac─▒ verici.


11


2008-12-03





SerialVersionUID, nesnenin s├╝r├╝m kontrol├╝ i├žin kullan─▒l─▒r. Ayr─▒ca seri dosyan─▒zda serialVersionUID de─čerini belirleyebilirsiniz. SerialVersionUID belirtmemenin sonucu, s─▒n─▒fta herhangi bir alan ekledi─činizde veya de─či┼čtirdi─činizde, o zaman zaten seri hale getirilmi┼č s─▒n─▒f, yeni s─▒n─▒f ve eski serile┼čtirilmi┼č nesne i├žin olu┼čturulan serialVersionUID farkl─▒ olaca─č─▒ndan kurtar─▒lamaz. Java serile┼čtirme i┼člemi, serile┼čtirilmi┼č nesnenin durumunu kurtarmak i├žin do─čru serialVersionUID de─čerine dayan─▒r ve serialVersionUID uyu┼čmazl─▒─č─▒ durumunda java.io.InvalidClassException komutunu atar.

Daha fazlas─▒ i├žin: http://javarevisited.blogspot.com/2011/04/top-10-java-serialization-interview.html#ixzz3VQxnpOPZ


11







Neden Java SerialVersionUID i├žinde dahili Serializable s─▒n─▒f kullan─▒yorsunuz ?

serialization Java ├žal─▒┼čma zaman─▒ s─▒ras─▒nda bir s─▒n─▒f i├žin bir s├╝r├╝m numaras─▒ olu┼čturur, b├Âylece daha sonra seri hale getirilebilir. Bu s├╝r├╝m numaras─▒ SerialVersionUID Java olarak bilinir .

SerialVersionUID Serile┼čtirilmi┼č verileri s├╝r├╝mlemek i├žin kullan─▒l─▒r. Bir s─▒n─▒f─▒ yaln─▒zca SerialVersionUID serile┼čtirilmi┼č ├Ârnekle e┼čle┼čiyorsa serile┼čtirebilirsiniz. SerialVersionUID S─▒n─▒f─▒m─▒zda bildirmedi─čimiz zaman , Java ├žal─▒┼čma zaman─▒ bizim i├žin olu┼čturur ancak ├Ânerilmez. ─░lan etmek ├Ânerilir SerialVersionUID olarak private static final long varsay─▒lan mekanizma ├Ânlemek i├žin de─či┼čken.

Bir s─▒n─▒f─▒ Serializable marker aray├╝z├╝ uygulayarak ilan etti─činizde java.io.Serializable , Java ├žal─▒┼čma zaman─▒, Externalizable aray├╝z├╝ kullanarak i┼člemi ├Âzelle┼čtirmemi┼č olman─▒z ko┼čuluyla, varsay─▒lan S─▒n─▒fland─▒rma mekanizmas─▒n─▒ kullanarak bu s─▒n─▒f─▒n ├Ârne─čini diske aktar─▒r .

ayr─▒ca bkz. SerialVersionUID'yi neden Serializable s─▒n─▒f─▒ i├žinde Java'da kullan─▒n

Kod: javassist.SerialVersionUID


9







Eski s─▒n─▒flarla uyumlulu─ču koruyarak ilk etapta serialVersionUID ayarlanmayan ├žok say─▒da s─▒n─▒f─▒ de─či┼čtirmek istiyorsan─▒z, IntelliJ Idea, Eclipse gibi ara├žlar rastgele say─▒lar ├╝retti─činden k─▒sad─▒r ve bir ├žok dosya ├╝zerinde ├žal─▒┼čmaz tek seferde. Kolayca serialVersionUID sorununu d├╝zeltmek i├žin a┼ča─č─▒daki bash beti─čini (Windows kullan─▒c─▒lar─▒ i├žin ├Âz├╝r dilerim, bir Mac sat─▒n almay─▒ veya Linux'a d├Ân├╝┼čt├╝rmeyi d├╝┼č├╝n├╝n) geldim:

 base_dir=$(pwd)                                                                  
src_dir=$base_dir/src/main/java                                                  
ic_api_cp=$base_dir/target/classes                                               

while read f                                                                     
do                                                                               
    clazz=${f//\//.}                                                             
    clazz=${clazz/%.java/}                                                       
    seruidstr=$(serialver -classpath $ic_api_cp $clazz | cut -d ':' -f 2 | sed -e 's/^\s\+//')
    perl -ni.bak -e "print $_; printf qq{%s\n}, q{    private $seruidstr} if /public class/" $src_dir/$f
done
 

Bu beti─či kaydetti─činizde, add_serialVersionUID.sh dosyas─▒n─▒ size ~ / bin olarak s├Âyleyin. Sonra Maven veya Gradle projenizin k├Âk dizininde ┼č├Âyle ├žal─▒┼č─▒n:

 add_serialVersionUID.sh < myJavaToAmend.lst
 

Bu .lst, serialVersionUID'yi a┼ča─č─▒daki bi├žimde eklemek i├žin java dosyalar─▒n─▒n listesini i├žerir:

 com/abc/ic/api/model/domain/item/BizOrderTransDO.java
com/abc/ic/api/model/domain/item/CardPassFeature.java
com/abc/ic/api/model/domain/item/CategoryFeature.java
com/abc/ic/api/model/domain/item/GoodsFeature.java
com/abc/ic/api/model/domain/item/ItemFeature.java
com/abc/ic/api/model/domain/item/ItemPicUrls.java
com/abc/ic/api/model/domain/item/ItemSkuDO.java
com/abc/ic/api/model/domain/serve/ServeCategoryFeature.java
com/abc/ic/api/model/domain/serve/ServeFeature.java
com/abc/ic/api/model/param/depot/DepotItemDTO.java
com/abc/ic/api/model/param/depot/DepotItemQueryDTO.java
com/abc/ic/api/model/param/depot/InDepotDTO.java
com/abc/ic/api/model/param/depot/OutDepotDTO.java
 

Bu komut dosyas─▒, ba┼čl─▒k alt─▒nda JDK serialVer arac─▒n─▒ kullan─▒r. Bu y├╝zden $ JAVA_HOME / bin'inizin PATH i├žinde oldu─čundan emin olun.


8







Bu soru Etkili Java'da Joshua Bloch taraf─▒ndan ├žok iyi belgelenmi┼čtir. ├çok iyi bir kitap ve mutlaka okumak gerekir. A┼ča─č─▒daki sebeplerden baz─▒lar─▒n─▒ ana hatlar─▒yla a├ž─▒klayaca─č─▒m:

Serile┼čtirme ├žal─▒┼čma zaman─▒, serile┼čtirilebilir her s─▒n─▒f i├žin Seri s├╝r├╝m ad─▒ verilen bir say─▒ ile gelir. Bu say─▒ serialVersionUID olarak adland─▒r─▒l─▒r. ┼×imdi bu say─▒n─▒n arkas─▒nda biraz Matematik var ve s─▒n─▒fta tan─▒mlanan alanlara / y├Ântemlere dayan─▒yor. Ayn─▒ s─▒n─▒f i├žin her zaman ayn─▒ s├╝r├╝m olu┼čturulur. Serile┼čtirme s─▒ras─▒nda bu numara, serile┼čtirilmi┼č bir nesnenin g├Ândericisinin ve al─▒c─▒s─▒n─▒n, serile┼čtirmeyle uyumlu olan nesne i├žin y├╝kl├╝ s─▒n─▒flara sahip oldu─čunu do─črulamak i├žin kullan─▒l─▒r. Al─▒c─▒, kar┼č─▒l─▒k gelen g├Ânderenin s─▒n─▒f─▒ndan farkl─▒ bir seri VersiyonUID'si olan nesne i├žin bir s─▒n─▒f y├╝klediyse, seri kald─▒rma i┼člemi InvalidClassException ile sonu├žlanacakt─▒r.

S─▒n─▒f seri hale getirilebilirse, ayr─▒ca, statik, final ve uzun olmas─▒ gereken "serialVersionUID" adl─▒ bir alan bildirerek kendi serialVersionUID'nizi de a├ž─▒k├ža ilan edebilirsiniz. ├ço─ču IDE Eclipse gibi o uzun dize olu┼čturman─▒za yard─▒mc─▒ olur.


6


2015-08-03





Bir nesne her seri hale getirildi─činde, nesne, nesnenin s─▒n─▒f─▒ i├žin bir s├╝r├╝m kimli─či numaras─▒ ile damgalan─▒r. Bu kimli─če serialVersionUID ad─▒ verilir ve s─▒n─▒f yap─▒s─▒yla ilgili bilgilere dayanarak hesaplan─▒r. Bir ├çal─▒┼čan s─▒n─▒f─▒ olu┼čturdu─čunuzu ve # 333 (JVM taraf─▒ndan atanan) s├╝r├╝m kimli─čine sahip oldu─čunu varsayal─▒m, ┼×imdi bu s─▒n─▒f─▒n nesnesini seri hale getirece─činiz zaman (Suppose ├çal─▒┼čan nesnesi), JVM UID'yi # 333 olarak atayacakt─▒r.

Bir durumu g├Âz ├Ân├╝nde bulundurun - ileride s─▒n─▒f─▒n─▒z─▒ d├╝zenlemeniz veya de─či┼čtirmeniz gerekecektir ve bu durumda de─či┼čtirdi─činizde, JVM ona yeni bir UID atayacakt─▒r (Diyelim # 444). ┼×imdi ├žal─▒┼čan nesnesini seri hale getirmeye ├žal─▒┼čt─▒─č─▒n─▒zda, JVM serile┼čtirilmi┼č nesnenin (├çal─▒┼čan nesnesi) s├╝r├╝m kimli─čini (# 333) s─▒n─▒f─▒nkiyle (yani # 444 (kar┼č─▒la┼čt─▒r─▒ld─▒─č─▒ndan beri) kar┼č─▒la┼čt─▒r─▒r. Kar┼č─▒la┼čt─▒rmada, JVM her iki versiyonun da UID'yi farkl─▒ bulaca─č─▒n─▒ ve bu nedenle Serile┼čtirmenin ba┼čar─▒s─▒z olaca─č─▒n─▒ g├Ârecektir. Bu nedenle, her s─▒n─▒f i├žin serialVersionID, programc─▒n─▒n kendisi taraf─▒ndan tan─▒mlan─▒rsa. S─▒n─▒f gelecekte geli┼čtirilse bile ayn─▒ olacakt─▒r ve dolay─▒s─▒yla JVM, s─▒n─▒f de─či┼čse bile s─▒n─▒f─▒n her zaman seri hale getirilmi┼č nesne ile uyumlu oldu─čunu g├Ârecektir. Daha fazla bilgi i├žin HEAD FIRST JAVAÔÇÖn─▒n 14. b├Âl├╝m├╝ne bak─▒n.


6







Basit Bir A├ž─▒klama:

  1. Veri serile┼čtiriyor musunuz?

    Seri hale getirme, temelde s─▒n─▒f verilerini bir dosyaya / stream / etc'ye yaz─▒yor. Seri hale getirme, bu verileri bir s─▒n─▒fa geri okuyor.

  2. ├ťretime girmeyi d├╝┼č├╝n├╝yor musunuz?

    Yaln─▒zca ├Ânemsiz / sahte verileri olan bir ┼čeyi test ediyorsan─▒z, endi┼čelenmeyin (do─črudan serile┼čtirmeyi test etmiyorsan─▒z).

  3. Bu ilk versiyon mu?

    E─čer ├Âyleyse, ayarlay─▒n serialVersionUID=1L .

  4. Bu ikinci, ├╝├ž├╝nc├╝ vb. Prod versiyonudur?

    ┼×imdi endi┼čelenmen gerekiyor serialVersionUID ve derinlemesine bakmal─▒s─▒n.

Temel olarak, bir s─▒n─▒f─▒ g├╝ncelledi─činizde s├╝r├╝m├╝ do─čru ┼čekilde g├╝ncellemezseniz, yazman─▒z / okuman─▒z gereken, eski verileri okumaya ├žal─▒┼čt─▒─č─▒n─▒zda bir hata al─▒rs─▒n─▒z.


2







Uzun laf─▒n k─▒sas─▒ anlatmak i├žin, bu alan seri hale getirilmi┼č verilerin do─čru ┼čekilde seri hale getirilip getirilemeyece─čini kontrol etmek i├žin kullan─▒l─▒r. Seri hale getirme ve seri hale getirme, genellikle program─▒n farkl─▒ kopyalar─▒ taraf─▒ndan yap─▒l─▒r; ├Ârne─čin, sunucu nesneyi dizeye, istemci ise dizeyi nesneye d├Ân├╝┼čt├╝r├╝r. Bu alan, her ikisinin de bu nesnenin ne oldu─ču hakk─▒nda ayn─▒ fikirde ├žal─▒┼čt─▒─č─▒n─▒ s├Âyler. Bu alan ┼ču durumlarda yard─▒mc─▒ olur:

  • Program─▒n─▒z─▒n farkl─▒ yerlerde ├žok say─▒da kopyas─▒ var (1 sunucu ve 100 m├╝┼čteri gibi). Nesnenizi de─či┼čtirirseniz, s├╝r├╝m numaran─▒z─▒ de─či┼čtirir ve bu istemcileri g├╝ncellemeyi unutursan─▒z, seri kald─▒rma yetene─čine sahip olmad─▒─č─▒n─▒ bilir.

  • Verilerinizi bir dosyada saklad─▒ysan─▒z ve daha sonra program─▒n g├╝ncellenmi┼č s├╝r├╝m├╝yle de─či┼čtirilmi┼č nesneyle a├žmaya ├žal─▒┼č─▒rsan─▒z, s├╝r├╝m├╝n├╝z├╝ do─čru tutarsan─▒z bu dosyan─▒n uyumlu olmad─▒─č─▒n─▒ bilirsiniz.

Ne zaman ├Ânemli?

En a├ž─▒k olan─▒ - nesnenize baz─▒ alanlar eklerseniz, eski s├╝r├╝mler bunlar─▒ kullanamayacaklard─▒r, ├ž├╝nk├╝ bu alanlar─▒n nesne yap─▒lar─▒nda bulunmamas─▒.

Daha az belirgin - Nesneyi seri hale getirdi─činizde, dizede bulunmayan alanlar─▒n NULL olarak tutulaca─č─▒ alanlar. Alan─▒n─▒z─▒ nesnenizden kald─▒rd─▒ysan─▒z, eski s├╝r├╝mler bu alan─▒ her zaman-NULL olarak tutacakt─▒r; eski s├╝r├╝mler bu alandaki verilere dayan─▒yorsa, bu davran─▒┼č yanl─▒┼čl─▒─ča yol a├žabilir (yine de sadece e─člence i├žin de─čil, bir ┼čey i├žin olu┼čturdunuz :-)).

En bariz - Bazen bir alan─▒n anlam─▒n─▒ ortaya koyma fikrini de─či┼čtirirsiniz. ├ľrne─čin, 12 ya┼č─▒ndayken "bisiklet" alt─▒nda "bisiklet" demek istiyorsun, ama 18 ya┼č─▒ndayken "motosiklet" demek istiyorsun - e─čer arkada┼člar─▒n seni "┼čehir i├žinde bisiklete binmeye" davet ederse ve bisiklete bindiyseniz, tarlalar aras─▒nda ayn─▒ anlam─▒ koruman─▒n ne kadar ├Ânemli oldu─čunu anlayacaks─▒n─▒z :-)


0







├ľncelikle sorunuzu yan─▒tlamak i├žin, s─▒n─▒f─▒m─▒zda SerialVersionUID bildirmedi─čimizde, Java ├žal─▒┼čma zaman─▒ bizim i├žin olu┼čturur, ancak bu i┼člem alan say─▒s─▒, alanlar─▒n t├╝r├╝, alanlar─▒n eri┼čim de─či┼čtiricisi, uygulanan aray├╝z gibi bir├žok s─▒n─▒f meta verisine duyarl─▒d─▒r s─▒n─▒fla vb. Bu nedenle kendimizi a├ž─▒klamam─▒z ├Ânerilir ve Eclipse sizi ayn─▒ konuda uyar─▒yor.

Seri hale getirme: S─▒k s─▒k, durumu (nesnenin de─či┼čkenlerindeki veriler) o kadar ├Ânemli olan ├Ânemli nesnelerle ├žal─▒┼č─▒r─▒z ki, nesnenin durumunu di─čerine g├Ânderme durumunda g├╝├ž / sistem ar─▒zas─▒ (veya) a─č ar─▒zas─▒ nedeniyle onu kaybetme riskiyle kar┼č─▒la┼čamay─▒z. makinesi. Bu problemin ├ž├Âz├╝m├╝, "Kal─▒c─▒l─▒k" olarak adland─▒r─▒l─▒r ve bu, verilerin kal─▒c─▒ olarak (bekletilmesi / kaydedilmesi) anlam─▒na gelir. Seri hale getirme, kal─▒c─▒l─▒k elde etmenin bir├žok yolundan biridir (verileri diske / belle─če kaydederek). Nesnenin durumunu kaydederken, nesneyi uygun bir ┼čekilde tekrar okuyabilmek i├žin (seri hale getirme) bir kimlik olu┼čturmak ├Ânemlidir. Bu benzersiz kimlik, ID ise SerialVersionUID'dir.


0