Serialization
lan
SerialVersionUID
tansah dadi misteri kanggo akeh pangembang Jawa. Aku kerep ndeleng pitakonan bab apa
SerialVersionUID
, utawa apa mengkono yen aku ora wara-wara
SerialVersionUID
ing sandi
Serializable
-class?
Saliyane 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
Customer
jinis
SerialVersionUID
dawa " Ing artikel iki, sampeyan ora mung bakal sinau basa Jawa
SerialVersionUID
nanging uga pengaruhe ing proses serialisasi lan de-serialisasi. Nalika sampeyan ngumumake kelas, minangka
Serializable
kanthi 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,
SerialVersionUID
ora ana sing cocog, banjur proses kasebut bakal metu kanthi pangecualian
InvalidClassException
ing aliran "
main
"
java.io.InvalidClassException
, lan uga bakal nyithak jeneng kelas lan sing cocog
SerialVersionUID
. Solusi cepet kanggo ndandani masalah iki yaiku nyalin
SerialVersionUID
lan nemtokake minangka konstanta jinis
private
static
final
long
ing kelas sampeyan. Ing artikel iki, kita bakal mangerteni apa kita kudu nggunakake
SerialVersionUID
ing 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
SerialVersionUID
ing
static
final
long
kelas 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,
SerialVersionUID
sing 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
SerialVersionUID
ing
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.
SerialVersionUID
kanggo 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
SerialVersionUID
kedadean 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
serialver
kanggo generate
SerialVersionUID
kanggo kelas. Iki migunani utamane kanggo ngembangake kelas; sarana kasebut bali
SerialVersionUID
ing format sing gampang disalin. Sampeyan bisa nggunakake
serialver
sarana 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
serialver
minangka
GUI
prentah
$ serialver –show
, iki bakal mbukak inspektur
serial version
sing njupuk jeneng kelas lengkap lan nampilake
Serial version
.
Ringkesan
Saiki kita ngerti apa iku
SerialVersionUID
lan apa iku penting kanggo wara-wara ing
Serializable
-class, iku wektu kanggo maneh sawetara bukti penting related kanggo Jawa SerialVersionUID.
SerialVersionUID
digunakake kanggo nuduhake versi data serialized.
- Nalika kita ora ngumumake
SerialVersionUID
ing 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.
- 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.
- 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
.
- 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
SerialVersionUID
ing Jawa. Saiki kita ngerti kenapa penting kanggo ngumumake kanthi bener
SerialVersionUID
ing 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
GO TO FULL VERSION