JavaRush /Blog Jawa /Random-JV /Apa nggunakake SerialVersionUID nang kelas Serializable i...
0xFF
tingkat
Донецк

Apa nggunakake SerialVersionUID nang kelas Serializable ing Jawa

Diterbitake ing grup
Serializationlan SerialVersionUIDtansah dadi misteri kanggo akeh pangembang Jawa. Aku kerep ndeleng pitakonan bab apa SerialVersionUID, utawa apa mengkono yen aku ora wara-wara SerialVersionUIDing sandi Serializable-class? Napa nggunakake SerialVersionUID ing kelas Serializable ing Jawa - 1Saliyane mbingungake lan jarang digunakake, alesan liyane kanggo pitakonan iki yaiku bebaya sing ilang Eclipse IDE SerialVersionUID, contone: " Pelanggan kelas Serializable ora ngumumake lapangan SerialVersionUID statisSerializable saka Customerjinis SerialVersionUIDdawa " Ing artikel iki, sampeyan ora mung bakal sinau basa Jawa SerialVersionUIDnanging uga pengaruhe ing proses serialisasi lan de-serialisasi. Nalika sampeyan ngumumake kelas, minangka Serializablekanthi ngleksanakake antarmuka token java.io.Serializable, runtime Java nyimpen conto kelas kasebut ing disk nggunakake mekanisme serialisasi standar kajaba sampeyan ngatur proses kanggo nggunakake antarmuka Externalizable . Sajrone serialisasi, runtime Java nggawe nomer versi kanggo kelas supaya bisa deserialize mengko. Ing Jawa, nomer versi iki dikenal minangka SerialVersionUID. Yen, sajrone deserialization, SerialVersionUIDora ana sing cocog, banjur proses kasebut bakal metu kanthi pangecualian InvalidClassExceptioning aliran " main" java.io.InvalidClassException, lan uga bakal nyithak jeneng kelas lan sing cocog SerialVersionUID. Solusi cepet kanggo ndandani masalah iki yaiku nyalin SerialVersionUIDlan nemtokake minangka konstanta jinis private static final longing kelas sampeyan. Ing artikel iki, kita bakal mangerteni apa kita kudu nggunakake SerialVersionUIDing Jawa lan carane nggunakake alat serialver JDK kanggo generate ID iki. Yen sampeyan anyar ing serialization, sampeyan uga bisa nonton Top 10 Pitakonan Interview Serialisasi Jawa kanggo netepke kawruh lan golek kesenjangan ing pangerten kanggo maca luwih. Kaya Concurrency(concurrency) lan Multi-threading(multithreading), Serialization(serialization) minangka topik liyane sing kudu diwaca kaping pirang-pirang.

Napa nggunakake SerialVersionUID ing Jawa

Nalika aku ngandika, nalika kita wis ora ditetepake Nilai SerialVersionUIDing static final longkelas kita, mekanisme serialization bakal nindakake kanggo kita. Mekanisme iki sensitif marang akeh rincian, kalebu lapangan kelas sampeyan, modifikasi akses, antarmuka sing dileksanakake, lan malah implementasi kompiler sing beda; owah-owahan apa wae ing kelas utawa panggunaan kompiler sing beda bisa ngasilake asil sing beda, SerialVersionUIDsing pungkasane bakal mungkasi data serialized saka reloaded. Iku beboyo sing gumantung ing mekanisme serialization Jawa kanggo generate id iki, kang iku apike sing tegas nemtokake SerialVersionUIDing kelas Serializable Panjenengan . Aku banget nyaranake maca klasik Jawa - Joshua Bloch "Jawa Efektif" kanggo mangerteni serialisasi Jawa lan masalah nangani kanthi ora bener. Miturut cara, JDK uga nyedhiyakake alat serialver, dumunung ing direktori bin saka direktori JAVA_HOME , ing komputerku, C:\Program Files\Java\jdk1.6.0_26\bin\serialver.exe , sing bisa digunakake kanggo ngasilake. SerialVersionUIDkanggo kelas lawas. Iki migunani banget yen sampeyan wis nggawe owah-owahan ing kelas sampeyan sing ngilangi serialisasi lan aplikasi sampeyan ora bisa ngisi maneh conto serial. Sampeyan bisa kanthi gampang nggunakake sarana iki kanggo nggawe SerialVersionUIDkedadean lawas, banjur gunakake kanthi jelas kanthi nyatakake lapangan minangka pribadi statis final long SerialVersionUID . Miturut cara, dianjurake banget kanggo alasan kinerja lan keamanan nggunakake format binar biasa kanggo serialisasi; maneh, "Jawa Efektif" duwe sawetara paragraf sing nuduhake kaluwihan format biasa kanthi rinci.

Carane nggunakake serialver JDK sarana kanggo generate SerialVersionUID

Sampeyan bisa nggunakake serialverkanggo generate SerialVersionUIDkanggo kelas. Iki migunani utamane kanggo ngembangake kelas; sarana kasebut bali SerialVersionUIDing format sing gampang disalin. Sampeyan bisa nggunakake serialversarana JDK kaya sing ditampilake ing conto:
$ serialver
use: serialver [-classpath classpath] [-show] [classname...]
$ serialver -classpath . Hello
Class Hello is not Serializable.
$ serialver -classpath . Hello
Hello: static final long SerialVersionUID = -4862926644813433707L;
Sampeyan uga bisa nggunakake sarana serialverminangka GUIprentah $ serialver –show, iki bakal mbukak inspektur serial versionsing njupuk jeneng kelas lengkap lan nampilake Serial version.

Ringkesan

Saiki kita ngerti apa iku SerialVersionUIDlan apa iku penting kanggo wara-wara ing Serializable-class, iku wektu kanggo maneh sawetara bukti penting related kanggo Jawa SerialVersionUID.
  1. SerialVersionUIDdigunakake kanggo nuduhake versi data serialized.

  2. Nalika kita ora ngumumake SerialVersionUIDing kelas, runtime Java nindakake kanggo kita, nanging proses iki sensitif marang akeh metadata kelas kalebu jumlah kolom, jinis lapangan, modifier akses lapangan, antarmuka sing dileksanakake ing kelas. , etc. Sampeyan bisa nemokake informasi pas ing dokumentasi Serialization saka Oracle.

  3. Disaranake kanggo ngumumake SerialVersionUID minangka variabel dawa final statis pribadi kanggo ngindhari mekanisme standar. Sawetara IDE, kayata Eclipse , uga ngetokake bebaya yen sampeyan lali iki, contone: "Pelanggan kelas Serializable ora ngumumake lapangan SerialVersionUID final statis saka jinis dawa." . Sanajan sampeyan bisa mateni bebaya iki kanthi pindhah menyang Window> Preferensi> Java> Compiler> Errors / Warnings> Potensi Masalah Pemrograman, aku saranake ora nglakoni. Mung nalika Recovery data ora dibutuhake aku bisa careless babagan. Mangkene apa kesalahan iki katon ing Eclipse IDE, sampeyan mung kudu nggawe keputusan cepet. Napa nggunakake SerialVersionUID ing kelas Serializable ing Jawa - 2

  4. Sampeyan uga bisa nggunakake sarana serialver saka JDK kanggo generate Versi Serial kanggo kelas ing Jawa. Utilitas kasebut uga duwe GUI, sing diaktifake nalika ngliwati parameter - show.

  5. Praktek paling apik ing serialisasi yaiku ngumumake kanthi jelas SerialVersionUID, supaya ora ana masalah karo de-serialisasi, utamane yen sampeyan nggarap aplikasi klien-server sing gumantung ing data serial, kayata RMI.
Iku kabeh babagan SerialVersionUIDing Jawa. Saiki kita ngerti kenapa penting kanggo ngumumake kanthi bener SerialVersionUIDing kelas. Sampeyan bisa matur nuwun marang IDE kanggo pangeling iki, sing bisa ngrusak de-serialisasi kelas sampeyan. Yen sampeyan pengin maca liyane babagan serialization lan konsep related, sampeyan uga bisa mriksa metu iki artikel apik tenan. Asli kene
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION