JAVA 物件序列化

2021-07-02 12:39:03 字數 1593 閱讀 6949

概念:物件序列化,就是將乙個物件轉化為二進位制的資料流;

方法:想要被序列化的物件,在定義該類時,必須實現serializable介面,或者實現externalizable介面;

物件序列化實質是把物件的屬性進行序列化為二進位制資料流,方法則不管;因為物件直接只有屬性是有差異的;

serializable介面把物件所有屬性進行序列化,externalizable介面則是可以選擇性的將部分屬性進行序列化,一般選用serializable介面,比較簡便。

例1:將乙個student類的物件序列化輸出至檔案中

首先定義student類:

class student implements serializable

public string tostring()

}

接著,就可以用objectoutputstream類對其物件進行輸出:

public static void main(string args)catch(exception e)

}

至此,可以看見ser.txt中已經有二進位制資料的存在,如圖:

完成物件的序列化輸出後,可以進行反序列化讀入:

inputstream in = new fileinputstream(file);//檔案輸入流

objectinputstream oin = new objectinputstream(in);//物件輸入流

student stu = (student)oin.readobject();//讀取物件,並向下轉換為student物件

system.out.println(stu);//輸出物件

in.close();

oin.close();

可以發現得到了之前定義的物件:以上方法可以發現,所有屬性都被序列化,如果只是想序列化一部分屬性,一部分屬性不序列化,可以選用externalizable介面完成,但是較為麻煩,比較簡便的還是應用serializable介面+transient欄位進行完成;被transient欄位修飾的屬性,將不會被序列化,例如以上的例子,宣告name屬性時為:

private transient string name=null;
則在物件序列化存入檔案,再被反序列化取出後,名字部分為null,而不是之前定義的「wangjxy」,因為改屬性不會被序列化。

最後,如果想要一次性序列化多個物件,而不是乙個乙個多次序列化的話,可以運用物件陣列,因為陣列也是引用型別,所以可以將陣列名按照物件名直接進行傳入voidwriteobject(object obj)中,如:

student stu = new student[3];

//.........具體例項化..........

oout.writeobject(stu);

之後讀取也用物件陣列:

student stu = (student)oin.readobject();

JAVA物件序列化,反序列化

理解序列化和反序列化對理解物件導向有很大的幫助。舉例如下,序列化格式自己定義 我們有兩個類,動物,人,人繼承動物。其中 人的屬性有 name 名稱 phonenum 手機號碼 等 人的方法有 serialize deserialize 動物的屬性有 mood 情緒 性別 等 動物的方法有 seria...

Java 物件序列化

物件的序列化就是對引用資料型別的io傳輸,將記憶體中的物件轉換成二進位製流,進而儲存在硬碟檔案中或者進行網路傳輸,這就是序列化 fileoutputstream objectoutputstream writeobject object,序列化的類 flush 將序列化的物件提取出來還原成物件,就是...

java物件序列化

參考 哪此屬性不會被序列化?並不是乙個實現了序列化介面的類的所有欄位及屬性都是可以序列化的 如果該類有父類,則分兩種情況來考慮,如果該父類已經實現了可序列化介面。則其父類的相應欄位及屬性的處理和該類相同 如果該類的父類沒有實現可序列化介面,則該類的父類所有的字段屬性將不會序列化,並且反序列化時會呼叫...