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