JavaRush /Java Blog /Random-TK /Näme üçin Java-da Serializable synpynyň içinde SerialVers...
0xFF
Dereje
Донецк

Näme üçin Java-da Serializable synpynyň içinde SerialVersionUID ulanyň

Toparda çap edildi
Serializationwe SerialVersionUIDköp Java döredijiler üçin elmydama syr bolup galýar. Näme hakda soraglary köplenç görýärin , ýa-da öz klasymda SerialVersionUIDyglan etmesem näme bolýar ? Bu soragyň bulaşyk we ýygy-ýygydan ulanylmagyndan başga-da, Eclipse IDE-iň ýitirilen duýduryşy , mysal üçin: " Serializable synp müşderisi statiki gutarnykly SerialVersionUID meýdançasyny " uzyn " diýip yglan etmeýär ) . Bu makalada diňe bir Java-yň esaslaryny öwrenmek bilen çäklenmän , onuň seriallaşdyrma we seriallaşdyrma prosesine edýän täsirini hem öwrenersiňiz. Bir synp yglan edeniňizde, bellik interfeýsini ýerine ýetirişiňiz ýaly, Java iş wagty, “Externalizable” interfeýsini ulanmak üçin prosesi düzmeseňiz, deslapky seriallaşdyryş mehanizmini ulanyp, şol synpyň mysalyny diskde saklaýar . Seriýalaşdyrma wagtynda, Java iş wagty synp üçin wersiýa belgisini döredýär, soň bolsa ony deserializasiýa edip biler. Java-da bu wersiýa belgisi diýilýär . Deserializasiýa wagtynda hiç hili gabat gelmeýän bolsa , " " akymda kadadan çykma bilen çykar we synpyň adyny we degişli görnüşini çap eder . Bu meseläni çözmek üçin çalt çözgüt, ony synpyňyzda hemişelik görnüş hökmünde göçürmek we kesgitlemekdir. Bu makalada näme üçin Java-da ulanmalydygymyzy we bu ID-ni döretmek üçin serwer JDK guralyny nädip ulanmalydygyny öwreneris. Seriýalaşdyrmak üçin täze bolsaňyz, bilimleriňize baha bermek we has giňişleýin okamak üçin düşünjäňizdäki boşluklary tapmak üçin iň gowy 10 Java Serializasiýa Söhbetdeşlik soraglaryna tomaşa edip bilersiňiz. (Birmeňzeşlik) we (köp okamak) ýaly , (serializasiýa) birnäçe gezek okamaga mynasyp başga bir mowzuk. SerialVersionUIDSerializableNäme üçin Java-da Serializable synpynyň içinde SerialVersionUID ulanmaly - 1SerialVersionUIDSerializableCustomerSerialVersionUIDSerialVersionUIDSerializablejava.io.SerializableSerialVersionUIDSerialVersionUIDInvalidClassExceptionmainjava.io.InvalidClassExceptionSerialVersionUIDSerialVersionUIDprivate static final longSerialVersionUIDConcurrencyMulti-threadingSerialization

Näme üçin Java-da SerialVersionUID ulanyň

Aýdyşym ýaly, synpymyzdaky SerialVersionUIDýaly bahany kesgitlemedik wagtymyz , seriallaşdyrma mehanizmi muny biziň üçin eder. static final longBu mehanizm köp jikme-jikliklere, şol sanda synpyňyzyň meýdanlaryna, giriş üýtgeýjilerine, ýerine ýetirýän interfeýslerine we hatda dürli düzüji ýerine ýetirişlerine-de duýgur; synpdaky islendik üýtgeşiklik ýa-da başga bir düzüjiniň ulanylmagy başga bir netije berip biler, SerialVersionUIDnetijede yzygiderli maglumatlaryň täzeden ýüklenmegini togtatyň. Bu idi döretmek üçin Java-yň seriallaşdyryş mehanizmine bil baglamak töwekgelçiliklidir, şonuň üçin ony Serializable synpyňyzdaSerialVersionUID aç -açan kesgitlemek gowy pikir . Java seriallaşdyrylyşyna we olary nädogry çözmegiň meselelerine düşünmek üçin Java klassiki - Joşua Bloch “Netijeli Java” okamagy maslahat berýärin . Theeri gelende aýtsak, JDK kompýuterimde JAVA_HOME katalogynyň bin katalogynda ýerleşýän C: \ Program Files \ Java \ jdk1.6.0_26 \ bin \ serialver.exe atly gural bilen üpjün edýär. köne synplar üçin. Synplaşdyrmagy bozýan we programmaňyz seriallaşdyrylan ýagdaýlary täzeden ýükläp bilmeýän bolsaňyz, synpyňyzda üýtgeşmeler girizen bolsaňyz, bu örän peýdalydyr. Köne mysallary döretmek üçin bu peýdany aňsatlyk bilen ulanyp bilersiňiz , soňra bolsa meýdançany şahsy statiki jemleýji diýip yglan edip, aç - açan ulanyp bilersiňiz . Theeri gelende aýtsak, öndürijilik we howpsuzlyk sebäpleri üçin yzygiderli ikilik formatyny seriallaşdyrmak üçin ulanmak maslahat berilýär; ýene-de “Netijeli Java” -da adaty formatyň artykmaçlyklaryny görkezýän birnäçe abzas bar. serialverSerialVersionUIDSerialVersionUID SerialVersionUID

SerialVersionUID döretmek üçin serialver JDK programmasyny nädip ulanmaly

Sapaklar üçin serialverdöredip bilersiňiz . SerialVersionUIDBu esasanam sapaklary ösdürmek üçin peýdalydyr, peýdalylyk SerialVersionUIDaňsat göçürme görnüşinde gaýdyp gelýär. serialverJDK kömekçisini mysalda görkezilişi ýaly ulanyp bilersiňiz :
$ serialver
use: serialver [-classpath classpath] [-show] [classname...]
$ serialver -classpath . Hello
Class Hello is not Serializable.
$ serialver -classpath . Hello
Hello: static final long SerialVersionUID = -4862926644813433707L;
Şeýle hem kömekçi programmany buýruk serialverhökmünde ulanyp bilersiňiz , bu synpyň doly adyny alýan we görkezýän inspektor açar . GUI$ serialver –showserial versionSerial version

Gysgaça mazmun

Indi munuň nämedigini SerialVersionUIDwe näme üçin ony bir klasda yglan etmegiň möhümdigini bildik Serializable, Java SerialVersionUID bilen baglanyşykly käbir möhüm faktlary gözden geçirmegiň wagty geldi.
  1. SerialVersionUIDyzygiderli maglumatlaryň wersiýasyny görkezmek üçin ulanylýar.

  2. Synpymyzda yglan etmedik wagtymyz SerialVersionUID, Java iş wagty muny biziň üçin edýär, ýöne bu amal synpyň köp metadatalaryna duýgur, meýdanlaryň sany, meýdanlaryň görnüşi, meýdan giriş üýtgeýjileri, synpda ýerine ýetirilýän interfeýsler. we ş.m. Takyk maglumatlary Oracle-dan Serializasiýa resminamalarynda tapyp bilersiňiz.

  3. SerialVersionUID-i deslapky mehanizmden gaça durmak üçin şahsy statiki gutarnykly uzyn üýtgeýji hökmünde yglan etmek maslahat berilýär. Eclipse ýaly käbir IDE-ler hem muny ýatdan çykarsaňyz duýduryş berýärler, mysal üçin: "Serializable synp müşderisi statiki gutarnykly SerialVersionUID görnüşini uzyn diýip yglan etmeýär." Bu duýduryşy Window> Saýlamalar> Java> Kompilýator> rorsalňyşlar / Duýduryşlar> Mümkin bolan programmirleme meselelerine girip öçürip bilersiňiz, muny etmezligi maslahat berýärin. Diňe maglumatlary dikeltmek talap edilmedik ýagdaýynda men bu barada biperwaý bolup bilerin. “Eclipse IDE” -de bu ýalňyşlygyň görnüşi, ine, ilkinji çalt karar bermek. Näme üçin Java-da Serializable synpynyň içinde SerialVersionUID ulanmaly

  4. Şeýle hem, Java-daky sapaklar üçin Serial wersiýasyny döretmek üçin JDK-dan serialwer programmasyny ulanyp bilersiňiz. Kömekçi enjamda GUI bar, ol - parametrden geçende açyk show.

  5. Seriallaşdyrmagyň iň oňat tejribesi, SerialVersionUIDesasanam RMI ýaly seriýalaýyn maglumatlara daýanýan müşderi-serwer programmasy bilen işleýän bolsaňyz, seriallaşdyrma bilen baglanyşykly hiç hili kynçylykdan gaça durmak, aç-açan yglan etmekdir.
Bularyň hemmesi SerialVersionUIDJava-da. SerialVersionUIDIndi näme üçin synpda dogry yglan etmegiň möhümdigini bildik . Synpyňyzyň seriallaşdyrylmagyny bozup biljek bu ýatlatma üçin IDE-ä minnetdarlyk bildirip bilersiňiz. Seriýalaşdyrmak we baglanyşykly düşünjeler barada has giňişleýin maglumat almak isleseňiz, bu ajaýyp makalalary hem gözden geçirip bilersiňiz. Asyl şu ýerde
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION