Serialization
жана
SerialVersionUID
көптөгөн Java иштеп чыгуучулары үчүн ар дайым сыр бойдон калууда. Мен эмне деген суроолорду көп көрөм же классымда
SerialVersionUID
жарыялабасам эмне болот ? Чаташкан жана сейрек колдонулгандан тышкары, бул суроонун дагы бир себеби - Eclipse IDEдин жок эскертүүсү , мисалы: " Serializable класстын Кардары узун " түрүндөгү статикалык
акыркы SerialVersionUID талаасын жарыялаbyte ). Бул макалада сиз Java тorнин негиздерин гана үйрөнбөстөн , анын сериялаштыруу жана сериядан чыгаруу процессине тийгизген таасирин дагы билесиз. Токен интерфейсин ишке ашыруу сыяктуу классты жарыялаганыңызда , Java иштөө убактысы ошол класстын үлгүсүн демейки сериялаштыруу механизмин колдонуп дискте сактайт, эгерде сиз процессти
Externalizable интерфейсин колдонууга конфигурацияламасаңыз . Сериялаштыруу учурунда Java иштөө убактысы класс үчүн version номерин түзөт, андыктан аны кийинчерээк сериядан чыгара алат. Java тorнде бул version номери катары белгилүү . Эгерде сериядан чыгаруу учурунда дал келүү болбосо, анда процесс " " агымында өзгөчө абалда чыгып , класстын атын жана тиешелүү атын басып чыгарат . Бул көйгөйдү чечүү үчүн тез чечим көчүрүү жана аны классыңыздагы константа түрү катары аныктоо болуп саналат. Бул макалада биз эмне үчүн Java-да колдонушубуз керек жана бул ID түзүү үчүн serialver JDK куралын кантип колдонуу керектиги жөнүндө билебиз . Эгер сиз сериалдаштырууга жаңыдан кирсеңиз, бorмиңизди баалоо жана андан ары окуу үчүн түшүнүгүңүздөгү боштуктарды табуу үчүн
Java Сериялаштыруу маектешүүнүн 10 мыкты суроолорун көрө аласыз . Окшош (шаакештик) жана (көп агым), (сериялаштыруу) дагы бир нече жолу окууга татыктуу тема.
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
акырында серияланган берorштердин кайра жүктөлүшүн токтотуңуз.Бул идентификаторду түзүү үчүн Javaнын сериалдаштыруу механизмине таянуу кооптуу, ошондуктан аны
Serializable классыңыздаSerialVersionUID
так аныктоо жакшы идея . Java сериализациясын жана аларды туура эмес иштетүү көйгөйлөрүн түшүнүү үчүн мен Java классигин окууну сунуштайм -
Джошуа Блох "Эффективдүү Java" . Айтмакчы, JDK ошондой эле менин компьютеримде
JAVA_HOME каталогунун
бин каталогунда жайгашкан куралды камсыз кылат,
C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe , аны түзүү үчүн колдонсо болот. эски класстар үчүн. Бул сиздин классыңызга сериалдаштырууну бузган өзгөртүүлөрдү киргизген учурда жана колдонмоңуз серияланган инстанцияларды кайра жүктөй албаган учурда абдан пайдалуу. Сиз эски инстанцияларды түзүү үчүн бул утorтаны оңой колдоно аласыз , андан кийин талааны
жеке статикалык 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
серияланган маалыматтардын versionсын көрсөтүү үчүн колдонулат.
- Биз классыбызда жарыя кылбаганыбызда
SerialVersionUID
, Java иштөө убактысы муну биз үчүн кылат, бирок бул процесс класстын көптөгөн метаберorштерине, анын ичинде талаалардын санына, талаалардын тибине, талаага кирүү модификаторлоруна, класста ишке ашырылган интерфейстерге сезимтал болот. , ж.б. Так маалыматты Oracleдан Сериялаштыруу documentтеринен таба аласыз.
- Демейки механизмди болтурбоо үчүн SerialVersionUIDди жеке статикалык акыркы узун өзгөрмө катары жарыялоо сунушталат. Кээ бир IDE, мисалы, Eclipse , эгер сиз муну унутуп калсаңыз, эскертүүлөрдү да чыгарышат, мисалы: "Сериализациялануучу класстын Кардары long тибиндеги статикалык акыркы SerialVersionUID талаасын жарыялаbyte." . Терезе > Артыкчылыктар > Java > Компилятор > Каталар/Эскертүүлөр > Потенциалдуу программалоо көйгөйлөрүнө өтүп, бул эскертүүнү өчүрсөңүз да, мен андай кылбоону сунуштайм. Маалыматтарды калыбына келтирүү талап кылынбаганда гана мен бул жөнүндө кайдыгер боло алам. Бул ката Eclipse IDEде кандай көрүнөт, эмне кылуу керек болгону биринчи тез чечимди кабыл алуу.
- Javaдагы класстар үчүн Сериялык versionны түзүү үчүн JDKден сериялык программаны да колдонсоңуз болот. Утorтада GUI бар, ал - параметрин өткөрүүдө иштетилген
show
.
- Сериялаштыруудагы эң мыкты практика - бул
SerialVersionUID
сериялаштыруу менен байланышкан көйгөйлөрдү болтурбоо үчүн ачык жарыялоо, айрыкча RMI сыяктуу сериялаштырылган маалыматтарга таянган кардар-server тиркемеси менен иштеп жатсаңыз.
Мунун баары
SerialVersionUID
Java тorнде.
SerialVersionUID
Эми биз класста туура жарыялоо эмне үчүн маанилүү экенин билебиз . Бул эстеткич үчүн IDE'ге ыраазычылык билдирсеңиз болот, ал классыңыздын сериядан чыгарылышын бузушу мүмкүн. Сериялаштыруу жана ага байланыштуу түшүнүктөр жөнүндө көбүрөөк окугуңуз келсе, бул укмуштуудай макалаларды да текшере аласыз.
Бул жерде оригиналдуу
GO TO FULL VERSION