JavaRush /Блоги Java /Random-TG /Чаро SerialVersionUID-ро дар дохили синфи Serializable да...
0xFF
Сатҳи
Донецк

Чаро SerialVersionUID-ро дар дохили синфи Serializable дар Java истифода баред

Дар гурӯҳ нашр шудааст
Serializationва SerialVersionUIDбарои бисёре аз таҳиягарони Java ҳамеша сирре боқӣ мемонад. Ман аксар вақт саволҳоро мебинам, ки чӣ аст ё агар ман дар синфи худ SerialVersionUIDэълон накунам, чӣ мешавад ? Ба ғайр аз печида будан ва кам истифодашаванда, сабаби дигари ин савол огоҳии гумшудаи Eclipse IDE мебошад , масалан: " Муштарии синфи Serializable майдони ниҳоии SerialVersionUID-и статикии навъи " long" -ро эълон намекунад ). Дар ин мақола, шумо на танҳо асосҳои Java , балки таъсири онро ба раванди сериализатсия ва де-сериализатсия меомӯзед. Вақте ки шумо синфро эълон мекунед, ба монанди татбиқи интерфейси аломат , вақти иҷроии Java як мисоли он синфро дар диск бо истифода аз механизми сериализатсияи пешфарз нигоҳ медорад, агар шумо ин равандро барои истифодаи интерфейси Externalizable танзим накунед . Ҳангоми сериализатсия, вақти кории Java рақами versionи синфро эҷод мекунад, то он баъдтар онро бесариализатсия кунад. Дар Java, ин рақами version бо номи . Агар ҳангоми бесериализатсия ягон мувофиқат мавҷуд набошад, пас раванд ба истиснои ҷараён " " хориҷ мешавад ва инчунин номи синф ва мувофиқро чоп мекунад . Ҳалли зуд барои ислоҳи ин мушкилот ин нусхабардорӣ ва муайян кардани он ҳамчун як навъи доимӣ дар синфи худ мебошад. Дар ин мақола, мо мефаҳмем, ки чаро мо бояд дар Java истифода барем ва чӣ тавр истифода бурдани асбоби serialver JDK барои тавлиди ин ID. Агар шумо дар сериализатсия нав бошед, шумо инчунин метавонед 10 Саволҳои мусоҳибаи силсилавии Java-ро тамошо кунед , то дониши худро баҳо диҳед ва камбудиҳои фаҳмиши худро барои хондани минбаъда пайдо кунед. Мисли (ҳамзамон) ва (сериализатсия), (сериализатсия) мавзӯи дигаре аст, ки сазовори хондани чанд маротиба аст. SerialVersionUIDSerializableЧаро SerialVersionUID-ро дар дохor синфи Serializable дар Java истифода баред - 1SerialVersionUIDSerializableCustomerSerialVersionUIDSerialVersionUIDSerializablejava.io.SerializableSerialVersionUIDSerialVersionUIDInvalidClassExceptionmainjava.io.InvalidClassExceptionSerialVersionUIDSerialVersionUIDprivate static final longSerialVersionUIDConcurrencyMulti-threadingSerialization

Чаро SerialVersionUID-ро дар Java истифода баред

SerialVersionUIDТавре ки ман гуфтам, вақте ки мо арзишеро дар синфи худ муайян накардаем static final long, механизми сериализатсия онро барои мо иҷро мекунад. Ин механизм ба бисёр тафсилотҳо, аз ҷумла майдонҳои синфи шумо, тағирдиҳандаҳои дастрасии онҳо, интерфейсҳои амалӣкардаи он ва ҳатто татбиқи гуногуни компиляторҳо ҳассос аст; ҳама гуна тағирот дар синф ё истифодаи компилятори дигар метавонад натиҷаи дигар оварад, ки дар SerialVersionUIDниҳояти кор хоҳад буд. Бозборкунии маълумоти силсилаишударо боздоред. Барои тавлиди ин id такя кардан ба механизми сериализатсияи Java хатарнок аст, аз ин рӯ фикри хуб аст, ки онро дар синфи SerializableSerialVersionUID худ муайян кунед . Ман тавсия медиҳам, ки классикии Java - Joshua Bloch "Effective Java" -ро хонед , то фаҳмед, ки сериализатсияи Java ва мушкилоти коркарди нодурусти онҳо. Дар омади гап, JDK инчунин асбоберо пешниҳод мекунад , ки дар феҳристи бин феҳристи JAVA_HOME дар компютери ман ҷойгир аст, C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe , ки метавонад барои тавлид истифода шавад барои синфҳои кӯҳна. Ин хеле муфид аст, агар шумо ба синфи худ тағирот ворид кардаед, ки силсилаикунониро вайрон мекунад ва барномаи шумо наметавонад мисолҳои сериалиро дубора бор кунад. Шумо метавонед ин утorтаро барои сохтани мисолҳои кӯҳна ба осонӣ истифода баред ва сипас онро тавассути эълон кардани майдон ҳамчун финали хусусии статикӣ истифода баред . Дар омади гап, барои иҷрои кор ва амният тавсия дода мешавад, ки формати муқаррарии дуӣ барои силсиласозӣ истифода шавад; боз ҳам, "Java самаранок" дорои якчанд параграфҳо мебошад, ки бартариҳои формати муқаррариро ба таври муфассал нишон медиҳанд. serialverSerialVersionUIDSerialVersionUID SerialVersionUID

Чӣ тавр истифода бурдани serialver JDK утorта барои тавлиди SerialVersionUID

Шумо метавонед serialverбарои тавлиди SerialVersionUIDдарсҳо истифода баред. Ин махсусан барои таҳияи синфҳо муфид аст; утorта SerialVersionUIDдар формати нусхабардории осон бармегардад. Шумо метавонед serialverутorтаи JDK-ро тавре ки дар мисол нишон дода шудааст, истифода баред:
$ 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-class эълон кунем, вақти баррасии баъзе далелҳои муҳими марбут ба Java SerialVersionUID расидааст.
  1. SerialVersionUIDбарои нишон додани versionи маълумоти силсилавӣ истифода мешавад.

  2. Вақте ки мо дар синфи худ эълон намекунем SerialVersionUID, вақти иҷроиши Java ин корро барои мо мекунад, аммо ин раванд ба бисёр метадатаҳои синф, аз ҷумла шумораи майдонҳо, намуди майдонҳо, тағирдиҳандаҳои дастрасии майдонҳо, интерфейсҳое, ки дар синф амалӣ карда мешаванд, ҳассос аст. , ва ғайра. Шумо метавонед маълумоти дақиқро дар ҳуҷҷатҳои Serialization аз Oracle пайдо кунед.

  3. Тавсия дода мешавад, ки SerialVersionUID ҳамчун тағирёбандаи ниҳоии статикии хусусӣ барои пешгирӣ кардани механизми пешфарз эълон карда шавад. Баъзе IDE-ҳо, ба монанди Eclipse , инчунин, агар шумо инро фаромӯш кунед, огоҳӣ медиҳанд, масалан: "Муштарии синфи Serializable майдони ниҳоии SerialVersionUID-и статикии навъи дарозро эълон намекунад." . Гарчанде ки шумо метавонед ин огоҳиро тавассути гузариш ба Равзана > Танзимотҳо > Java > Компилятор > Хатогиҳо/Огоҳҳо > Мушкилоти эҳтимолии барномасозӣ хомӯш кунед, ман тавсия медиҳам, ки ин корро накунед. Танҳо вақте ки барқароркунии маълумот талаб карда намешавад, ман метавонам дар ин бора беэътиноӣ кунам. Ин аст, ки ин хато дар Eclipse IDE чӣ гуна аст, танҳо ба шумо лозим аст, ки қарори аввалини зуд қабул кунед. Чаро SerialVersionUID-ро дар дохor синфи Serializable дар Java истифода баред - 2

  4. Шумо инчунин метавонед утorтаи serialver аз JDK-ро барои тавлиди Version Serial барои дарсҳо дар Java истифода баред. Утorта инчунин дорои GUI мебошад, ки ҳангоми интиқоли - параметр фаъол карда мешавад show.

  5. Таҷрибаи беҳтарини сериализатсия ин ба таври возеҳ эълон кардани SerialVersionUID, барои пешгирӣ кардани мушкилот дар де-сериализатсия мебошад, хусусан агар шумо бо як барномаи муштарӣ-server кор кунед, ки ба маълумоти силсилавӣ, ба монанди RMI такя мекунад.
Ин ҳама дар бораи SerialVersionUIDJava аст. SerialVersionUIDАкнун мо медонем, ки чаро дар синф дуруст эълон кардан муҳим аст . Шумо метавонед ба IDE-и худ барои ин ёдраскунӣ ташаккур кунед, ки эҳтимолан десериализатсияи синфи шуморо вайрон мекунад. Агар шумо хоҳед, ки дар бораи сериализатсия ва мафҳумҳои марбута бештар хонед, шумо инчунин метавонед ин мақолаҳои олиро тафтиш кунед. Дар ин ҷо аслӣ
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION