客户端序列码生成_[基础]-序列化
一、什么是序列化
程序存在的意義就是進(jìn)行數(shù)據(jù)的計(jì)算與傳輸,在我們的網(wǎng)絡(luò)架構(gòu)中只能識別二進(jìn)制和字節(jié)碼,而不能識別java對象。序列化就是將無法識別的java對象轉(zhuǎn)化為二進(jìn)制和字節(jié)碼的一種機(jī)制。
通過一定的規(guī)則將 java對象,包括數(shù)據(jù)和數(shù)據(jù)類型轉(zhuǎn)換成二進(jìn)制和字節(jié)碼 稱為序列化。將二進(jìn)制和字節(jié)碼還原成 java對象的過程就稱為反序列化
二、什么是 serialVersionUID
1、每一個實(shí)現(xiàn)序列化接口 Serializable 的java 對象,都有一個 serialVersionUID。
2、serialVersionUID 是唯一的,相當(dāng)于 java對象的唯一身份標(biāo)識
3、如果沒有顯示聲明,java 對象 serialVersionUID 會根據(jù)類中的數(shù)據(jù)、結(jié)構(gòu)生成。也就是說,一旦修改了 java 對象,serialVersionUID 也會不同
4、為了保證,在對java 對象添加一個方法,或者修改某個數(shù)據(jù) 不會發(fā)生無法反序列化的結(jié)果,這是就要指定 serialVersionUID 。保證 反序列化的正常執(zhí)行。
三、Java原生序列化實(shí)操
3.1、測試對象
3.2、測試部分代碼
構(gòu)建 `Money` 對象,并進(jìn)行序列化和反序列化的操作,并將序列化后的數(shù)據(jù)持久化到磁盤文件中。
3.3、模擬操作1
step1、在沒有在沒有顯示聲明 serialVersionUID 下,執(zhí)行序列化操作,持久化到文件中。
step2、修改 Money 對象,新增一個屬性
step3、進(jìn)行反序列化,將文件中的數(shù)據(jù)反序列化成 Money對象
反序列化失敗
3.4、模擬操作2
step1、顯示聲明 serialVersionUID 下,執(zhí)行序列化操作,持久化到文件中。
step2、修改 Money 對象,新增一個屬性
step3、進(jìn)行反序列化,將文件中的數(shù)據(jù)反序列化成 Money對象
反序列化成功
四、總結(jié)
1. 在java中,只要一個類實(shí)現(xiàn)了java.io.Serializable接口,那么它就可以被序列化
2. 通過ObjectOutputStream和ObjectInputStream對對象進(jìn)行序列化和反序列化操作
3. 對象是否允許被反序列化,不僅僅是取決于對象的代碼是否一致,同時還有一個重要的因素(UID)
4. 序列化不保存靜態(tài)變量
5. 要想父類對象也參與序列化操作,那么必須要讓父類也實(shí)現(xiàn)Serializable接口
6. Transient關(guān)鍵字,主要是控制變量是否能夠被序列化。如果沒有被序列化的成員變量反序列化后,會被設(shè)置成初始值,比如String -> null
7. 通過序列化操作實(shí)現(xiàn)深度克隆
總結(jié)
以上是生活随笔為你收集整理的客户端序列码生成_[基础]-序列化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端信息查询与显示_中国商标网查询显示的
- 下一篇: 台式电脑cpu排行榜_台式电脑CPU性能