国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java學習之序列化

2019-11-06 08:04:15
字體:
來源:轉載
供稿:網友

我們都站在巨人的肩膀上


1.序列化:

以特定的方式對類實例的瞬時狀態進行編碼保存的一種操作。將一個對象的狀態(各個屬性量)保存起來,然后在適當的時候再獲得。將數據分解成字節流,以便存儲在文件中或在網絡上傳輸

2.反序列化:

打開字節流并重構對象。對象序列化不僅要將基本數據類型轉換成字節表示,有時還要恢復數據。恢復數據要求有恢復數據的對象實例

3.序列化特點:

如果某個類能夠被序列化,其子類也可以被序列化。聲明為statictransient類型的成員數據不能被序列化重點內容。因為static代表類的狀態transient代表對象的臨時數據

4.對象序列化:

在沒有序列化前,每個保存在(Heap)中的對象都有相應的狀態(state),即實例變量(instance ariable)可以存到文件中,又可以從文件中讀取出來,在堆中創建原來的對象。保存的時候不僅僅保存實例變量的值JVM也要保存一些信息,比如類的類型等方便將來恢復原來的對象

5.使用場景:

對象序列化可以實現分布式對象。主要應用例如:RMI要利用對象序列化運行遠程主機上的服務,就像在本地機上運行對象時一樣。 java對象序列化不僅保留一個對象的數據,而且遞歸保存對象引用的每個對象的數據。可以將整個對象層次寫入字節流中,可以保存在文件中或在網絡連接上傳遞。利用對象序列化可以進行對象的”深復制”,即復制對象本身及引用的對象本身。序列化一個對象可能得到整個對象序列。 當你想把的內存中的對象狀態保存到一個文件中或者數據庫中時候。保存這個狀態的作用主要用于不同jvm之間進行類實例間的共享

6.為什么要使用serialVersionUID

對于實現了Serializable接口的類,可以將其序列化輸出至磁盤文件中,同時會將其serialVersionUID輸出到文件中。然后有需要使用時,再從磁盤將對象內容及serialVersionUID讀入內容中的某個對象。將磁盤內容讀入對象時,需要進行強制類型轉換此時,將對比從磁盤讀入的Serializable與對象所屬類的Serializable,若二者一致,則轉換成功。若二者不一致,則轉換失敗,并拋出InvalidClassException。

7.serialVersionUID一種就是1L,一種是生成一個很大的數,這兩種有什么區別呢?

手工遞增版本號。1->2->3…..是根據類的結構產生的hash值。增減一個屬性、方法等,都可能導致這個值產生變化。我想這種方式適用于這樣的場景:開發者認為每次修改類后就需要生成新的版本號,不想向下兼容,操作就是刪除原有serialVesionUid聲明語句,再自動生成一下。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴南区| 梧州市| 监利县| 江孜县| 延川县| 宁陕县| 方山县| 太仆寺旗| 鄯善县| 大英县| 新和县| 南皮县| 建瓯市| 呼玛县| 新宾| 南川市| 宿州市| 鸡泽县| 镇原县| 新泰市| 中阳县| 屏南县| 全州县| 重庆市| 海盐县| 沅陵县| 托克逊县| 平武县| 扶沟县| 合山市| 苗栗县| 丰镇市| 黄大仙区| 西贡区| 商都县| 景泰县| 县级市| 出国| 阿城市| 宜章县| 泊头市|