Serialization
және
SerialVersionUID
көптеген Java әзірлеушілері үшін әрқашан жұмбақ болып қала береді. Мен не деген сұрақтарды жиі көремін немесе сыныпта
SerialVersionUID
жарияламасам не болады ? Түсініксіз және сирек қолданылатындықтан басқа, бұл сұрақтың тағы бір себебі Eclipse IDE-нің жоқ ескертуі болып табылады , мысалы: « Serializable класының Тұтынушы ұзақ « түріндегі
тұрақты соңғы SerialVersionUID өрісін жарияламайды ). Бұл мақалада сіз Java негіздерін ғана емес , сонымен қатар оның сериализация және сериядан шығару процесіне әсерін үйренесіз. Сіз сыныпты жариялаған кезде, таңбалауыш интерфейсін іске асыру арқылы Java орындалу уақыты процесті
Externalizable интерфейсін пайдалану үшін конфигурацияламасаңыз, әдепкі сериялау механизмін пайдаланып дискіде сол сыныптың данасын сақтайды . Серияландыру кезінде Java орындалу уақыты сынып үшін нұсқа нөмірін жасайды, осылайша ол оны кейін сериядан шығара алады. Java тілінде бұл нұсқа нөмірі ретінде белгілі . Егер сериядан шығару кезінде сәйкестік болмаса, процесс " " ағынындағы ерекшелікпен шығады , сонымен қатар сынып атауы мен сәйкес . басып шығарады . Бұл мәселені шешудің жылдам шешімі оны сыныптағы түр тұрақтысы ретінде көшіру және анықтау болып табылады. Бұл мақалада біз Java-да неліктен пайдалану керектігін және осы идентификаторды жасау үшін serialver JDK құралын қалай пайдалану керектігін білеміз . Егер сіз сериализацияны жаңадан бастасаңыз, біліміңізді бағалау және әрі қарай оқу үшін түсінуіңіздегі олқылықтарды табу үшін
ең жақсы 10 Java сериялық сұхбат сұрақтарын көруге болады . Ұқсас (бірлесу) және (көп ағынды), (серияландыру) бірнеше рет оқуға лайық тағы бір тақырып.
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
Неліктен 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» кәдімгі пішімнің артықшылықтарын егжей-тегжейлі көрсететін бірнеше параграфтардан тұрады.
serialver
SerialVersionUID
SerialVersionUID
SerialVersionUID
SerialVersionUID жасау үшін serialver JDK утorтасын пайдалану жолы
Сіз сыныптар үшін
serialver
генерациялау үшін пайдалана аласыз .
SerialVersionUID
Бұл әсіресе сыныптарды әзірлеу үшін пайдалы; утorта
SerialVersionUID
оңай көшірілетін пішімде қайтарылады.
serialver
JDK ут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 –show
serial version
Serial version
Түйіндеме
Енді біз оның не екенін
SerialVersionUID
және оны -сыныпта жариялау неліктен маңызды екенін білеміз
Serializable
, Java SerialVersionUID-ге қатысты кейбір маңызды фактілерді қарастыратын кез келді.
SerialVersionUID
серияланған деректердің нұсқасын көрсету үшін пайдаланылады.
- Біз өз сыныпта жарияламасақ
SerialVersionUID
, Java орындалу уақыты мұны біз үшін жасайды, бірақ бұл процесс сыныптың көптеген метадеректеріне, соның ішінде өрістер санына, өрістер түріне, өріске кіру модификаторларына, сыныпта енгізілген интерфейстерге сезімтал. , және т.б. Нақты ақпаратты Oracle компаниясының Серияландыру құжаттамасынан таба аласыз.
- Әдепкі механизмді болдырмау үшін SerialVersionUID жеке статикалық соңғы ұзақ айнымалы ретінде жариялау ұсынылады. Кейбір IDE, мысалы, Eclipse , егер сіз мұны ұмытып қалсаңыз, ескертулер шығарады, мысалы: "Сериализацияланатын класс Тұтынушы ұзақ түрдегі статикалық соңғы SerialVersionUID өрісін жарияламайды." . Терезе > Теңшелімдер > Java > Компилятор > Қателер/ескертулер > Ықтимал бағдарламалау мәселелері тармағына өту арқылы бұл ескертуді өшіруге болады, бірақ мен мұны жасамауды ұсынамын. Деректерді қалпына келтіру қажет болмаған кезде ғана мен оған немқұрайлы қарай аламын. Міне, бұл қате Eclipse IDE-де қалай көрінеді, сізге бірінші жылдам шешім қабылдау қажет.
- Сондай-ақ, Java тіліндегі сыныптар үшін Сериялық нұсқаны жасау үшін JDK жүйесіндегі сериалдыру утorтасын пайдалануға болады. Утorтада GUI бар, ол - параметрін беру кезінде қосылады
show
.
- Серияландырудағы ең жақсы тәжірибе -
SerialVersionUID
сериядан шығаруға қатысты кез келген ақауларды болдырмау үшін, әсіресе RMI сияқты серияланған деректерге негізделген клиент-server қолданбасымен жұмыс істеп жатсаңыз, анық жариялау болып табылады.
Мұның бәрі
SerialVersionUID
Java тілінде.
SerialVersionUID
Енді біз сабақта дұрыс айтудың неліктен маңызды екенін білеміз . Бұл еске салғыш үшін IDE-ге алғыс айта аласыз, ол сіздің сыныптың сериядан шығарылуын бұзуы мүмкін. Серияландыру және қатысты ұғымдар туралы көбірек оқығыңыз келсе, осы тамаша мақалаларды да тексере аласыз.
Түпнұсқа
осында
GO TO FULL VERSION