JavaRush /Java Blogu /Random-AZ /Niyə Java-da Serializable sinfində SerialVersionUID istif...
0xFF
Səviyyə
Донецк

Niyə Java-da Serializable sinfində SerialVersionUID istifadə edin?

Qrupda dərc edilmişdir
SerializationSerialVersionUIDbir çox Java tərtibatçıları üçün həmişə sirr olaraq qalır. Mən tez-tez sualları görürəm ki, nədir və ya sinfimdə SerialVersionUIDelan etməsəm nə baş verir ? Çaşqınlıq və nadir hallarda istifadə edilməkdən başqa, bu sualın başqa səbəbi Eclipse IDE-nin çatışmayan xəbərdarlığıdır , məsələn: " Serializable sinif Müştərisi " long" tipli statik yekun SerialVersionUID sahəsini elan etmir ). Bu yazıda siz təkcə Java-nın əsaslarını deyil , həm də onun seriallaşdırma və seriyadan çıxarılması prosesinə təsirini öyrənəcəksiniz . Siz sinif elan etdiyiniz zaman, məsələn, işarə interfeysini həyata keçirməklə , prosesi Xariciləşdirilə bilən interfeysdən istifadə etmək üçün konfiqurasiya etmədiyiniz halda Java işləmə vaxtı həmin sinfin nümunəsini standart seriallaşdırma mexanizmindən istifadə edərək diskdə saxlayır . Serializasiya zamanı Java işləmə vaxtı sinif üçün versiya nömrəsi yaradır ki, sonra onu seriyadan çıxara bilsin. Java-da bu versiya nömrəsi kimi tanınır . Əgər seriyadan çıxarma zamanı heç bir uyğunluq yoxdursa, o zaman proses " " axınında istisna olmaqla çıxacaq və həmçinin sinif adını və müvafiq olanı çap edəcək . Bu problemi həll etmək üçün sürətli həll onu sinifinizdə bir tip sabiti kimi köçürmək və müəyyən etməkdir . Bu yazıda biz Java-da niyə istifadə etməli olduğumuzu və bu ID-ni yaratmaq üçün serialver JDK alətindən necə istifadə etməyi öyrənəcəyik . Əgər seriallaşdırmada yenisinizsə, biliklərinizi qiymətləndirmək və əlavə oxumaq üçün anlayışınızdakı boşluqları tapmaq üçün Ən Yaxşı 10 Java Serializasiya Müsahibə Suallarına baxa bilərsiniz. Kimi (koncurrency) və (multithreading), (serialization) bir neçə dəfə oxunmağa layiq başqa bir mövzudur. SerialVersionUIDSerializableNiyə Java-da Serializable sinfində SerialVersionUID istifadə edin - 1SerialVersionUIDSerializableCustomerSerialVersionUIDSerialVersionUIDSerializablejava.io.SerializableSerialVersionUIDSerialVersionUIDInvalidClassExceptionmainjava.io.InvalidClassExceptionSerialVersionUIDSerialVersionUIDprivate static final longSerialVersionUIDConcurrencyMulti-threadingSerialization

Niyə Java-da SerialVersionUID istifadə edin

Dediyim kimi, sinifimizdəki SerialVersionUIDkimi bir dəyər təyin etmədikdə , seriallaşdırma mexanizmi bunu bizim üçün edəcək. static final longBu mexanizm sinifinizin sahələri, onların giriş modifikatorları, tətbiq etdiyi interfeyslər və hətta müxtəlif kompilyator tətbiqləri də daxil olmaqla bir çox detallara həssasdır; sinifdə hər hansı dəyişiklik və ya fərqli kompilyatordan istifadə fərqli nəticə verə bilər, nəticədə SerialVersionUIDbu seriallaşdırılmış verilənlərin yenidən yüklənməsini dayandırın.Bu identifikatoru yaratmaq üçün Java-nın seriallaşdırma mexanizminə etibar etmək risklidir, ona görə də onu Serializasiya edilə bilənSerialVersionUID sinifinizdə açıq şəkildə müəyyən etmək yaxşı fikirdir . Java serializasiyasını və onların səhv idarə edilməsi problemlərini başa düşmək üçün Java klassiki - Joshua Bloch "Effektiv Java" nı oxumağı çox tövsiyə edirəm . Yeri gəlmişkən, JDK mənim kompüterimdə JAVA_HOME qovluğunun bin qovluğunda yerləşən C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe alətini də təmin edir ki, bu da yaratmaq üçün istifadə edilə bilər. köhnə siniflər üçün. Serializasiyanı pozan sinifinizdə dəyişikliklər etmisinizsə və tətbiqiniz seriallaşdırılmış nümunələri yenidən yükləyə bilmirsə, bu çox faydalıdır. Siz asanlıqla köhnə nümunələr yaratmaq üçün bu yardım proqramından istifadə edə bilərsiniz və sonra sahəni şəxsi statik final long kimi elan etməklə onu açıq şəkildə istifadə edə bilərsiniz . Yeri gəlmişkən, performans və təhlükəsizlik baxımından seriallaşdırma üçün adi ikili formatdan istifadə etmək çox tövsiyə olunur; yenə də “Effektiv Java” adi formatın üstünlüklərini çox ətraflı şəkildə nümayiş etdirən bir neçə paraqrafa malikdir. serialverSerialVersionUIDSerialVersionUID SerialVersionUID

SerialVersionUID yaratmaq üçün serialver JDK yardım proqramından necə istifadə etmək olar

Siz dərslər üçün serialveryaratmaq üçün istifadə edə bilərsiniz. SerialVersionUIDBu, xüsusilə sinifləri inkişaf etdirmək üçün faydalıdır; yardım proqramı SerialVersionUIDasanlıqla kopyalanan formatda qayıdır. serialverSiz nümunədə göstərildiyi kimi JDK yardım proqramından istifadə edə bilərsiniz :
$ serialver
use: serialver [-classpath classpath] [-show] [classname...]
$ serialver -classpath . Hello
Class Hello is not Serializable.
$ serialver -classpath . Hello
Hello: static final long SerialVersionUID = -4862926644813433707L;
Utiliti komanda serialverkimi də istifadə edə bilərsiniz, bu , sinifin tam adını alan və onu göstərən müfəttiş açacaq . GUI$ serialver –showserial versionSerial version

Xülasə

SerialVersionUIDİndi bunun nə olduğunu və nə üçün onu -classda elan etməyin vacib olduğunu bilirik Serializable, Java SerialVersionUID ilə bağlı bəzi vacib faktları nəzərdən keçirməyin vaxtı gəldi.
  1. SerialVersionUIDseriallaşdırılmış məlumatların versiyasını göstərmək üçün istifadə olunur.

  2. SerialVersionUIDSinifimizdə elan etmədiyimiz zaman Java işləmə vaxtı bunu bizim üçün edir, lakin bu proses sinifdə tətbiq olunan sahələrin sayı, sahələrin növü, sahəyə giriş modifikatorları, interfeyslər daxil olmaqla sinifin bir çox metadatasına həssasdır. və s. Dəqiq məlumatı Oracle-dan Serializasiya sənədlərində tapa bilərsiniz.

  3. Defolt mexanizmdən qaçmaq üçün SerialVersionUID-ni şəxsi statik yekun uzun dəyişən kimi elan etmək tövsiyə olunur. Eclipse kimi bəzi IDE-lər də bunu unutsanız xəbərdarlıqlar verir, məsələn: "Seriallaşdırıla bilən sinif Müştəri uzun tipli statik yekun SerialVersionUID sahəsini elan etmir." . Pəncərə > Üstünlüklər > Java > Kompilyator > Səhvlər/Xəbərdarlıqlar > Potensial Proqramlaşdırma Problemləri bölməsinə keçməklə bu xəbərdarlığı deaktiv edə bilsəniz də, bunu etməməyi təklif edirəm. Yalnız məlumatların bərpası tələb olunmayanda mən bu barədə ehtiyatsız davrana bilərəm. Bu səhv Eclipse IDE-də necə görünür, sizə lazım olan tək şey ilk tez qərar verməkdir. Niyə Java-da Serializable sinfində SerialVersionUID istifadə edin - 2

  4. Siz həmçinin Java-da dərslər üçün Serial Versiya yaratmaq üçün JDK-dan serialver yardım proqramından istifadə edə bilərsiniz. Utility də GUI-yə malikdir, bu da - parametrini keçərkən aktivləşdirilir show.

  5. Serializasiyada ən yaxşı təcrübə SerialVersionUID, serializasiya ilə bağlı hər hansı problemin qarşısını almaq üçün, xüsusən RMI kimi seriallaşdırılmış məlumatlara əsaslanan müştəri-server tətbiqi ilə işləyirsinizsə, açıq şəkildə elan etməkdir.
Hər şey SerialVersionUIDJava ilə bağlıdır. SerialVersionUIDİndi biz sinifdə düzgün bəyan etməyin nə üçün vacib olduğunu bilirik . Bu xatırlatma üçün IDE-yə təşəkkür edə bilərsiniz, bu, potensial olaraq sinifinizin seriyasızlaşdırılmasını poza bilər. Serializasiya və əlaqəli anlayışlar haqqında daha çox oxumaq istəyirsinizsə, bu zəhmli məqalələrə də baxa bilərsiniz. Orijinal burada
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION