JavaRush /Java блогу /Random-KY /Эмне үчүн Javaдагы Serializable классынын ичинде SerialVe...
0xFF
Деңгээл
Донецк

Эмне үчүн Javaдагы Serializable классынын ичинде SerialVersionUID колдонуңуз

Группада жарыяланган
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 мыкты суроолорун көрө аласыз . Окшош (шаакештик) жана (көп агым), (сериялаштыруу) дагы бир нече жолу окууга татыктуу тема. SerialVersionUIDSerializableЭмне үчүн Javaдагы Serializable классынын ичинде SerialVersionUID колдонуңуз - 1SerialVersionUIDSerializableCustomerSerialVersionUIDSerialVersionUIDSerializablejava.io.SerializableSerialVersionUIDSerialVersionUIDInvalidClassExceptionmainjava.io.InvalidClassExceptionSerialVersionUIDSerialVersionUIDprivate static final longSerialVersionUIDConcurrencyMulti-threadingSerialization

Эмне үчүн 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" кадимки форматтын артыкчылыктарын майда-чүйдөсүнө чейин көрсөткөн бир нече абзацтарга ээ. 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серияланган маалыматтардын versionсын көрсөтүү үчүн колдонулат.

  2. Биз классыбызда жарыя кылбаганыбызда SerialVersionUID, Java иштөө убактысы муну биз үчүн кылат, бирок бул процесс класстын көптөгөн метаберorштерине, анын ичинде талаалардын санына, талаалардын тибине, талаага кирүү модификаторлоруна, класста ишке ашырылган интерфейстерге сезимтал болот. , ж.б. Так маалыматты Oracleдан Сериялаштыруу documentтеринен таба аласыз.

  3. Демейки механизмди болтурбоо үчүн SerialVersionUIDди жеке статикалык акыркы узун өзгөрмө катары жарыялоо сунушталат. Кээ бир IDE, мисалы, Eclipse , эгер сиз муну унутуп калсаңыз, эскертүүлөрдү да чыгарышат, мисалы: "Сериализациялануучу класстын Кардары long тибиндеги статикалык акыркы SerialVersionUID талаасын жарыялаbyte." . Терезе > Артыкчылыктар > Java > Компилятор > Каталар/Эскертүүлөр > Потенциалдуу программалоо көйгөйлөрүнө өтүп, бул эскертүүнү өчүрсөңүз да, мен андай кылбоону сунуштайм. Маалыматтарды калыбына келтирүү талап кылынбаганда гана мен бул жөнүндө кайдыгер боло алам. Бул ката Eclipse IDEде кандай көрүнөт, эмне кылуу керек болгону биринчи тез чечимди кабыл алуу. Эмне үчүн Java - 2деги Serializable классынын ичинде SerialVersionUID колдонуңуз

  4. Javaдагы класстар үчүн Сериялык versionны түзүү үчүн JDKден сериялык программаны да колдонсоңуз болот. Утorтада GUI бар, ал - параметрин өткөрүүдө иштетилген show.

  5. Сериялаштыруудагы эң мыкты практика - бул SerialVersionUIDсериялаштыруу менен байланышкан көйгөйлөрдү болтурбоо үчүн ачык жарыялоо, айрыкча RMI сыяктуу сериялаштырылган маалыматтарга таянган кардар-server тиркемеси менен иштеп жатсаңыз.
Мунун баары SerialVersionUIDJava тorнде. SerialVersionUIDЭми биз класста туура жарыялоо эмне үчүн маанилүү экенин билебиз . Бул эстеткич үчүн IDE'ге ыраазычылык билдирсеңиз болот, ал классыңыздын сериядан чыгарылышын бузушу мүмкүн. Сериялаштыруу жана ага байланыштуу түшүнүктөр жөнүндө көбүрөөк окугуңуз келсе, бул укмуштуудай макалаларды да текшере аласыз. Бул жерде оригиналдуу
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION