JavaRush /Java блогы /Random-KK /Неліктен Java жүйесінде Serializable сыныбында SerialVers...
0xFF
Деңгей
Донецк

Неліктен Java жүйесінде Serializable сыныбында SerialVersionUID пайдалану керек

Топта жарияланған
Serializationжәне SerialVersionUIDкөптеген Java әзірлеушілері үшін әрқашан жұмбақ болып қала береді. Мен не деген сұрақтарды жиі көремін немесе сыныпта SerialVersionUIDжарияламасам не болады ? Түсініксіз және сирек қолданылатындықтан басқа, бұл сұрақтың тағы бір себебі Eclipse IDE-нің жоқ ескертуі болып табылады , мысалы: « Serializable класының Тұтынушы ұзақ « түріндегі тұрақты соңғы SerialVersionUID өрісін жарияламайды ). Бұл мақалада сіз Java негіздерін ғана емес , сонымен қатар оның сериализация және сериядан шығару процесіне әсерін үйренесіз. Сіз сыныпты жариялаған кезде, таңбалауыш интерфейсін іске асыру арқылы Java орындалу уақыты процесті Externalizable интерфейсін пайдалану үшін конфигурацияламасаңыз, әдепкі сериялау механизмін пайдаланып дискіде сол сыныптың данасын сақтайды . Серияландыру кезінде Java орындалу уақыты сынып үшін нұсқа нөмірін жасайды, осылайша ол оны кейін сериядан шығара алады. Java тілінде бұл нұсқа нөмірі ретінде белгілі . Егер сериядан шығару кезінде сәйкестік болмаса, процесс " " ағынындағы ерекшелікпен шығады , сонымен қатар сынып атауы мен сәйкес . басып шығарады . Бұл мәселені шешудің жылдам шешімі оны сыныптағы түр тұрақтысы ретінде көшіру және анықтау болып табылады. Бұл мақалада біз Java-да неліктен пайдалану керектігін және осы идентификаторды жасау үшін serialver JDK құралын қалай пайдалану керектігін білеміз . Егер сіз сериализацияны жаңадан бастасаңыз, біліміңізді бағалау және әрі қарай оқу үшін түсінуіңіздегі олқылықтарды табу үшін ең жақсы 10 Java сериялық сұхбат сұрақтарын көруге болады . Ұқсас (бірлесу) және (көп ағынды), (серияландыру) бірнеше рет оқуға лайық тағы бір тақырып. SerialVersionUIDSerializableНеліктен Java-дағы Serializable класында SerialVersionUID пайдалану керек - 1SerialVersionUIDSerializableCustomerSerialVersionUIDSerialVersionUIDSerializablejava.io.SerializableSerialVersionUIDSerialVersionUIDInvalidClassExceptionmainjava.io.InvalidClassExceptionSerialVersionUIDSerialVersionUIDprivate static final longSerialVersionUIDConcurrencyMulti-threadingSerialization

Неліктен Java-да SerialVersionUID пайдалану керек?

SerialVersionUIDМен айтқанымдай, біз сыныптағыдай мәнді анықтамаған кезде static final long, сериялау механизмі мұны біз үшін жасайды. Бұл механизм көптеген мәліметтерге, соның ішінде сыныптың өрістеріне, олардың қол жеткізу модификаторларына, ол іске асыратын интерфейстерге және тіпті әртүрлі компиляторды іске асыруға сезімтал; сыныпқа кез келген өзгерістер немесе басқа компиляторды пайдалану басқа нәтижеге әкелуі мүмкін, SerialVersionUIDбұл сайып келгенде серияланған деректердің қайта жүктелуін тоқтатыңыз Бұл идентификаторды жасау үшін Java сериализация механизміне сену қауіпті, сондықтан оны Serializable сыныбындаSerialVersionUID нақты анықтаған дұрыс . Java сериализациясын және оларды қате өңдеу мәселелерін түсіну үшін Java классигі - Джошуа Блоктың «Тиімді Java» кітабын оқуды ұсынамын . Айтпақшы, JDK сонымен қатар менің компьютерімдегі JAVA_HOME каталогының bin каталогында орналасқан C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe құралын ұсынады , оны жасау үшін пайдалануға болады. ескі сыныптар үшін. Бұл сериализацияны бұзатын сыныпқа өзгертулер енгізген жағдайда және қолданба серияланған даналарды қайта жүктей алмайтын жағдайда өте пайдалы. Бұл қызметтік бағдарламаны ескі даналарды жасау үшін оңай пайдалануға болады , содан кейін өрісті жеке static final long ретінде жариялау арқылы оны анық пайдалануға болады . Айтпақшы, өнімділік пен қауіпсіздік мақсатында сериализация үшін кәдімгі екілік пішімін пайдалану өте ұсынылады; тағы да «Тиімді Java» кәдімгі пішімнің артықшылықтарын егжей-тегжейлі көрсететін бірнеше параграфтардан тұрады. serialverSerialVersionUIDSerialVersionUID SerialVersionUID

SerialVersionUID жасау үшін serialver JDK утorтасын пайдалану жолы

Сіз сыныптар үшін serialverгенерациялау үшін пайдалана аласыз . SerialVersionUIDБұл әсіресе сыныптарды әзірлеу үшін пайдалы; утorта SerialVersionUIDоңай көшірілетін пішімде қайтарылады. serialverJDK утorтасын мысалда көрсетілгендей пайдалануға болады :
$ serialver
use: serialver [-classpath classpath] [-show] [classname...]
$ serialver -classpath . Hello
Class Hello is not Serializable.
$ serialver -classpath . Hello
Hello: static final long SerialVersionUID = -4862926644813433707L;
Сондай-ақ, утorтаны пәрмен serialverретінде пайдалануға болады, бұл сыныптың толық атауын алатын және оны көрсететін инспекторды ашады . GUI$ serialver –showserial versionSerial version

Түйіндеме

Енді біз оның не екенін SerialVersionUIDжәне оны -сыныпта жариялау неліктен маңызды екенін білеміз Serializable, Java SerialVersionUID-ге қатысты кейбір маңызды фактілерді қарастыратын кез келді.
  1. SerialVersionUIDсерияланған деректердің нұсқасын көрсету үшін пайдаланылады.

  2. Біз өз сыныпта жарияламасақ SerialVersionUID, Java орындалу уақыты мұны біз үшін жасайды, бірақ бұл процесс сыныптың көптеген метадеректеріне, соның ішінде өрістер санына, өрістер түріне, өріске кіру модификаторларына, сыныпта енгізілген интерфейстерге сезімтал. , және т.б. Нақты ақпаратты Oracle компаниясының Серияландыру құжаттамасынан таба аласыз.

  3. Әдепкі механизмді болдырмау үшін SerialVersionUID жеке статикалық соңғы ұзақ айнымалы ретінде жариялау ұсынылады. Кейбір IDE, мысалы, Eclipse , егер сіз мұны ұмытып қалсаңыз, ескертулер шығарады, мысалы: "Сериализацияланатын класс Тұтынушы ұзақ түрдегі статикалық соңғы SerialVersionUID өрісін жарияламайды." . Терезе > Теңшелімдер > Java > Компилятор > Қателер/ескертулер > Ықтимал бағдарламалау мәселелері тармағына өту арқылы бұл ескертуді өшіруге болады, бірақ мен мұны жасамауды ұсынамын. Деректерді қалпына келтіру қажет болмаған кезде ғана мен оған немқұрайлы қарай аламын. Міне, бұл қате Eclipse IDE-де қалай көрінеді, сізге бірінші жылдам шешім қабылдау қажет. Неліктен Java - 2-де Serializable класында SerialVersionUID пайдалану керек

  4. Сондай-ақ, Java тіліндегі сыныптар үшін Сериялық нұсқаны жасау үшін JDK жүйесіндегі сериалдыру утorтасын пайдалануға болады. Утorтада GUI бар, ол - параметрін беру кезінде қосылады show.

  5. Серияландырудағы ең жақсы тәжірибе - SerialVersionUIDсериядан шығаруға қатысты кез келген ақауларды болдырмау үшін, әсіресе RMI сияқты серияланған деректерге негізделген клиент-server қолданбасымен жұмыс істеп жатсаңыз, анық жариялау болып табылады.
Мұның бәрі SerialVersionUIDJava тілінде. SerialVersionUIDЕнді біз сабақта дұрыс айтудың неліктен маңызды екенін білеміз . Бұл еске салғыш үшін IDE-ге алғыс айта аласыз, ол сіздің сыныптың сериядан шығарылуын бұзуы мүмкін. Серияландыру және қатысты ұғымдар туралы көбірек оқығыңыз келсе, осы тамаша мақалаларды да тексере аласыз. Түпнұсқа осында
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION