JavaRush /Java blogi /Random-UZ /Nima uchun Java'da Serializable sinfida SerialVersionUID ...
0xFF
Daraja
Донецк

Nima uchun Java'da Serializable sinfida SerialVersionUID dan foydalaning

Guruhda nashr etilgan
Serializationva SerialVersionUIDko'pgina Java dasturchilari uchun doimo sir bo'lib qoladi. Men tez-tez nima degan savollarni ko'raman yoki sinfimda SerialVersionUIDe'lon qilmasam nima bo'ladi ? Chalkashlik va kamdan-kam qo'llanilishidan tashqari, bu savolning yana bir sababi Eclipse IDE-ning etishmayotgan ogohlantirishidir , masalan: " Serializable sinf mijozi " long" tipidagi statik yakuniy SerialVersionUID maydonini e'lon qilmaydi ). Ushbu maqolada siz nafaqat Java asoslarini , balki uning ketma-ketlashtirish va seriyadan chiqarish jarayoniga ta'sirini ham o'rganasiz. Sinfni e'lon qilganingizda, masalan , token interfeysini qo'llash orqali Java ish vaqti ushbu sinfning namunasini standart ketma-ketlashtirish mexanizmi yordamida diskda saqlaydi, agar siz jarayonni Externalizable interfeysidan foydalanishga sozlamaguningizcha . Seriyalashtirish vaqtida Java ish vaqti sinf uchun versiya raqamini yaratadi, shunda u keyinchalik uni seriyadan chiqarishi mumkin. Java-da bu versiya raqami sifatida tanilgan . Agar ketma-ketlikdan chiqarish vaqtida mos keladigan narsa bo'lmasa, jarayon " " oqimdagi istisno bilan tugaydi va sinf nomi va mos keladigan ni ham chop etadi . Ushbu muammoni hal qilishning tezkor yechimi uni nusxalash va sinfingizdagi doimiy tur sifatida aniqlashdir . Ushbu maqolada biz Java-da nima uchun foydalanishimiz kerakligini va ushbu identifikatorni yaratish uchun serialver JDK vositasidan qanday foydalanishni bilib olamiz. Agar siz seriallashtirishda yangi bo'lsangiz, bilimingizni baholash va keyingi o'qish uchun tushunishingizdagi kamchiliklarni topish uchun Java-ni seriyalilashtirish uchun eng yaxshi 10 ta intervyu savollarini ko'rishingiz mumkin. Kabi (bir vaqtning o'zida) va (ko'p o'qish), (seriyalash) bir necha marta o'qishga loyiq yana bir mavzu. SerialVersionUIDSerializableNima uchun Java-da Serializable sinfida SerialVersionUID dan foydalanish kerak - 1SerialVersionUIDSerializableCustomerSerialVersionUIDSerialVersionUIDSerializablejava.io.SerializableSerialVersionUIDSerialVersionUIDInvalidClassExceptionmainjava.io.InvalidClassExceptionSerialVersionUIDSerialVersionUIDprivate static final longSerialVersionUIDConcurrencyMulti-threadingSerialization

Nima uchun Java'da SerialVersionUID dan foydalanish kerak?

Aytganimdek, biz sinfimizdagi SerialVersionUIDkabi qiymatni aniqlamaganimizda , serializatsiya mexanizmi buni biz uchun qiladi. static final longUshbu mexanizm ko'plab tafsilotlarga, jumladan sinfingizning maydonlariga, ularning kirish modifikatorlariga, u amalga oshiradigan interfeyslarga va hattoki turli kompilyator ilovalariga sezgir; sinfdagi har qanday o'zgarishlar yoki boshqa kompilyatordan foydalanish boshqa natijaga olib kelishi mumkin, SerialVersionUIDbu oxir-oqibatda bo'ladi. ketma-ketlashtirilgan ma'lumotlarning qayta yuklanishini to'xtating.Ushbu identifikatorni yaratish uchun Java-ning serializatsiya mexanizmiga tayanish xavfli, shuning uchun uni Serializable sinfingizdaSerialVersionUID aniq belgilash yaxshidir . Java-ni seriyalashtirish va ularni noto'g'ri boshqarish muammolarini tushunish uchun Java klassikasi - Joshua Blochning "Effektiv Java" ni o'qishni tavsiya qilaman . Aytgancha, JDK mening kompyuterimda JAVA_HOME katalogining bin katalogida joylashgan C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe vositasini ham taqdim etadi , undan yaratish uchun foydalanish mumkin. eski sinflar uchun. Agar siz o'z sinfingizga serializatsiyani buzadigan o'zgartirishlar kiritgan bo'lsangiz va ilovangiz ketma-ketlashtirilgan misollarni qayta yuklay olmasa, bu juda foydali. Eski misollarni yaratish uchun ushbu yordam dasturidan osongina foydalanishingiz mumkin , so'ngra maydonni shaxsiy statik final long deb e'lon qilish orqali uni aniq ishlatishingiz mumkin . Aytgancha, unumdorlik va xavfsizlik nuqtai nazaridan ketma-ketlashtirish uchun odatiy ikkilik formatdan foydalanish tavsiya etiladi; yana, "Effektiv Java" oddiy formatning afzalliklarini batafsil ko'rsatadigan bir nechta paragraflarga ega. serialverSerialVersionUIDSerialVersionUID SerialVersionUID

SerialVersionUID yaratish uchun serialver JDK yordam dasturidan qanday foydalanish kerak

serialverSiz sinflar uchun yaratish uchun foydalanishingiz mumkin SerialVersionUID. Bu, ayniqsa, sinflarni ishlab chiqish uchun foydalidir; yordamchi dastur SerialVersionUIDnusxa ko'chirish oson formatda qaytadi. serialverJDK yordam dasturidan misolda ko'rsatilganidek foydalanishingiz mumkin :
$ serialver
use: serialver [-classpath classpath] [-show] [classname...]
$ serialver -classpath . Hello
Class Hello is not Serializable.
$ serialver -classpath . Hello
Hello: static final long SerialVersionUID = -4862926644813433707L;
Bundan tashqari, yordam dasturidan buyruq serialversifatida foydalanishingiz mumkin , bu to'liq sinf nomini oladigan va uni ko'rsatadigan inspektorni ochadi . GUI$ serialver –showserial versionSerial version

Xulosa

Endi biz bu nima ekanligini SerialVersionUIDva nima uchun uni -classda e'lon qilish muhimligini bilamiz Serializable, Java SerialVersionUID bilan bog'liq ba'zi muhim faktlarni ko'rib chiqish vaqti keldi.
  1. SerialVersionUIDketma-ketlashtirilgan ma'lumotlar versiyasini ko'rsatish uchun ishlatiladi.

  2. SerialVersionUIDAgar biz sinfimizda e'lon qilmasak , Java ish vaqti buni biz uchun qiladi, lekin bu jarayon sinfning ko'plab metama'lumotlariga sezgir bo'ladi, jumladan, maydonlar soni, maydonlar turi, maydonga kirish modifikatorlari, sinfda amalga oshiriladigan interfeyslar. , va hokazo. Aniq ma'lumotni Oracle'dan Serializatsiya hujjatlarida topishingiz mumkin.

  3. Standart mexanizmdan qochish uchun SerialVersionUID ni shaxsiy statik yakuniy uzun o'zgaruvchi sifatida e'lon qilish tavsiya etiladi. Eclipse kabi ba'zi IDE'lar ham buni unutib qo'ysangiz, ogohlantirishlar chiqaradi, masalan: "Serializable sinf mijozi long tipidagi statik yakuniy SerialVersionUID maydonini e'lon qilmaydi." . Oyna > Parametrlar > Java > Kompilyator > Xatolar/Ogohlantirishlar > Potentsial dasturlash muammolari bo‘limiga o‘tish orqali ushbu ogohlantirishni o‘chirib qo‘yishingiz mumkin bo‘lsa-da, men buni qilmaslikni tavsiya qilaman. Faqat ma'lumotni tiklash talab qilinmasa, men bu haqda beparvo bo'lishim mumkin. Eclipse IDE-da bu xato qanday ko'rinadi, sizga kerak bo'lgan yagona narsa birinchi tezkor qarorni qabul qilishdir. Nima uchun Java-da Serializable sinfida SerialVersionUID dan foydalanish kerak - 2

  4. Java-dagi sinflar uchun Serial Versiyani yaratish uchun JDK-dan serialver yordam dasturidan ham foydalanishingiz mumkin. Yordamchi dasturda GUI ham mavjud bo'lib, u - parametrini o'tkazishda yoqiladi show.

  5. Seriyalashtirishning eng yaxshi amaliyoti - SerialVersionUIDseriyalilashtirish bilan bog'liq har qanday muammolarni oldini olish uchun, ayniqsa, RMI kabi ketma-ketlashtirilgan ma'lumotlarga tayanadigan mijoz-server ilovasi bilan ishlayotgan bo'lsangiz, aniq e'lon qilishdir.
Hammasi SerialVersionUIDJava haqida. SerialVersionUIDEndi biz nima uchun sinfda to'g'ri e'lon qilish muhimligini bilamiz . Ushbu eslatma uchun IDE-ga minnatdorchilik bildirishingiz mumkin, bu sizning sinfingiz seriyasini bekor qilishi mumkin. Agar siz serializatsiya va tegishli tushunchalar haqida ko'proq o'qishni istasangiz, ushbu ajoyib maqolalarni ham ko'rishingiz mumkin. Original bu yerda
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION