Serialization
va
SerialVersionUID
ko'pgina Java dasturchilari uchun doimo sir bo'lib qoladi. Men tez-tez nima degan savollarni ko'raman yoki sinfimda
SerialVersionUID
e'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.
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
Nima uchun Java'da SerialVersionUID dan foydalanish kerak?
Aytganimdek, biz sinfimizdagi
SerialVersionUID
kabi qiymatni aniqlamaganimizda , serializatsiya mexanizmi buni biz uchun qiladi.
static
final
long
Ushbu 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,
SerialVersionUID
bu 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.
serialver
SerialVersionUID
SerialVersionUID
SerialVersionUID
SerialVersionUID yaratish uchun serialver JDK yordam dasturidan qanday foydalanish kerak
serialver
Siz sinflar uchun yaratish uchun foydalanishingiz mumkin
SerialVersionUID
. Bu, ayniqsa, sinflarni ishlab chiqish uchun foydalidir; yordamchi dastur
SerialVersionUID
nusxa ko'chirish oson formatda qaytadi.
serialver
JDK 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
serialver
sifatida foydalanishingiz mumkin , bu to'liq sinf nomini oladigan va uni ko'rsatadigan inspektorni ochadi .
GUI
$ serialver –show
serial version
Serial version
Xulosa
Endi biz bu nima ekanligini
SerialVersionUID
va nima uchun uni -classda e'lon qilish muhimligini bilamiz
Serializable
, Java SerialVersionUID bilan bog'liq ba'zi muhim faktlarni ko'rib chiqish vaqti keldi.
SerialVersionUID
ketma-ketlashtirilgan ma'lumotlar versiyasini ko'rsatish uchun ishlatiladi.
SerialVersionUID
Agar 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.
- 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.
- 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
.
- Seriyalashtirishning eng yaxshi amaliyoti -
SerialVersionUID
seriyalilashtirish 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
SerialVersionUID
Java haqida.
SerialVersionUID
Endi 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
GO TO FULL VERSION