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

首頁 > 學院 > 開發設計 > 正文

serialVersionUID 對序列化,反序列化的影響

2019-11-08 20:19:13
字體:
來源:轉載
供稿:網友

說一下個人理解,如果有不對的,希望大家多多指點啊!

如果一個類,實現了Serializable接口,則可以被序列化到本地。 此時,會有一個屬性,serialVersionUID,來表示該實體類的版本。

如果沒有指定serialVersionUID: 當一個類被序列化后,如果發生了改變,不包括增加空格,換行,增加注釋,等等,那么反序列化后,會拋出異常:java.io.InvalidClassException。 這是因為序列化的時候,如果沒有指定serialVersionUID,Java序列化機制會根據編譯的class(它通過類名,方法名等諸多因素經過計算而得,理論上是一一映射的關系,也就是唯一的)自動生成一個serialVersionUID作序列化版本比較用。 如果一個類發生修改,serialVersionUID則會發生改變。反序列的時候,JVM會把傳來的字節流中的serialVersionUID與相應實體(類)的serialVersionUID進行比較,如果相同就認為是一致的,可以進行反序列化,否則就會出現序列化版本不一致的異常(InvalidClassException)。

如果指定了serialVersionUID: 如果序列化后,增加了屬性或者方法,則反序列化的時候,不會拋異常,但是新增加的屬性會被賦予對應類型的默認值,新增加的方法可以調用。 如果序列化后,刪除了屬性或者方法,則反序列化后,會忽略被刪除的屬性或方法。

具體實現的例子,參照的文章找不到原創作者,只能貼出參照時的地址: http://blog.csdn.net/zzjjiandan/article/details/32336079 在此貼出格式化后的測試用代碼

測試用的實體類

package test;import java.io.Serializable;public class Serial implements Serializable { PRivate static final long serialVersionUID = 1L; int id; String name; String test; public Serial(int id, String name,String test) { this.id = id; this.name = name; this.test = test; } public String toString() { return "DATA: " + id + " " + name + " " + test; } public void add(){ System.out.println("add"); } /*public Serial(int id, String name) { this.id = id; this.name = name; } public String toString() { // return "DATA: " + id + " " + name + " " + test; return "DATA: " + id + " " + name; }*/}

序列化的類

package test;import java.io.FileOutputStream;import java.io.ObjectOutputStream;public class SerialTest { public static void main(String args[]) { //Serial serial1 = new Serial(1, "song"); Serial serial1 = new Serial(1, "song","aa"); System.out.println("Object Serial" + serial1); try { FileOutputStream fos = new FileOutputStream("serialTest.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(serial1); oos.flush(); oos.close(); } catch (Exception e) { e.printStackTrace(); } }}

反序列化的類

package test;import java.io.FileInputStream;import java.io.ObjectInputStream;public class DeserialTest { public static void main(String[] args) { // TODO Auto-generated method stub Serial serial2; try { FileInputStream fis = new FileInputStream("serialTest.txt"); ObjectInputStream ois = new ObjectInputStream(fis); serial2 = (Serial) ois.readObject(); ois.close(); System.out.println("Object Deserial" + serial2); serial2.add(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖远县| 永昌县| 竹山县| 榆树市| 辽宁省| 邹平县| 临清市| 施甸县| 含山县| 额敏县| 三明市| 利川市| 南丹县| 丰都县| 呈贡县| 磐安县| 丰县| 曲周县| 观塘区| 云和县| 合阳县| 海林市| 鱼台县| 方正县| 凤翔县| 新昌县| 都昌县| 合江县| 枝江市| 勐海县| 揭东县| 曲靖市| 来凤县| 平潭县| 滦南县| 张家港市| 来宾市| 来宾市| 福鼎市| 南皮县| 海门市|