Serialization
və
SerialVersionUID
bir ç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ə
SerialVersionUID
elan 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.
SerialVersionUID
Serializable
SerialVersionUID
Serializable
Customer
SerialVersionUID
SerialVersionUID
Serializable
java.io.Serializable
SerialVersionUID
SerialVersionUID
InvalidClassException
main
java.io.InvalidClassException
SerialVersionUID
SerialVersionUID
private
static
final
long
SerialVersionUID
Concurrency
Multi-threading
Serialization
Niyə Java-da SerialVersionUID istifadə edin
Dediyim kimi, sinifimizdəki
SerialVersionUID
kimi bir dəyər təyin etmədikdə , seriallaşdırma mexanizmi bunu bizim üçün edəcək.
static
final
long
Bu 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ə
SerialVersionUID
bu 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.
serialver
SerialVersionUID
SerialVersionUID
SerialVersionUID
SerialVersionUID yaratmaq üçün serialver JDK yardım proqramından necə istifadə etmək olar
Siz dərslər üçün
serialver
yaratmaq üçün istifadə edə bilərsiniz.
SerialVersionUID
Bu, xüsusilə sinifləri inkişaf etdirmək üçün faydalıdır; yardım proqramı
SerialVersionUID
asanlıqla kopyalanan formatda qayıdır.
serialver
Siz 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
serialver
kimi də istifadə edə bilərsiniz, bu , sinifin tam adını alan və onu göstərən müfəttiş açacaq .
GUI
$ serialver –show
serial version
Serial 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.
SerialVersionUID
seriallaşdırılmış məlumatların versiyasını göstərmək üçün istifadə olunur.
SerialVersionUID
Sinifimizdə 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.
- 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.
- 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
.
- 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
SerialVersionUID
Java 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
GO TO FULL VERSION