由ObjectInputStream和ObjectOutputStream類讀寫的對象必須實現Serializable接口。Transient(表示變量是臨時的標誌)和對象中靜態類型的成員變量將不會被讀寫。這兩個類可用於在網絡流中傳輸對象。
(transient:Java語言的關鍵字,變量修飾符。如果用transient聲明實例變量,則在存儲對象時不需要維護它的值。
Java的序列化提供了壹種持久化對象實例的機制。壹個對象持久化的時候,可能會有壹個特殊的對象數據成員,我們不想用序列化機制來保存。為了在特定對象的域上關閉序列化,可以在該域之前添加關鍵字transient。當對象被序列化時,瞬態變量的值不包括在序列化表示中,但包括非瞬態變量。)
可以序列化的MyClass類的定義:
公共類MyClass實現Serializable{
公共瞬態線程t;//t不會被序列化。
私有字符串customerID
私人利息總額;
}
編程示例:創建壹個可序列化的student對象,用ObjectOutputStream類將其存儲在壹個文件(mytext.txt)中,然後用ObjectInputStream類將存儲的數據讀入壹個student對象中,即恢復保存的student對象。
[java]查看純文本
導入Java . io . *;
Class student實現Serializable//必須實現Serializable接口才能序列化。
{
int age
字符串名稱;
學生(整數,字符串名稱){
this.age =年齡;
this.name = name
}
}
公共類Iotest {
/**
* @param args
*/
公共靜態void main(String[] args) {
// TODO自動生成的方法存根
學生stu1 =新生(20,“張三”);
學生stu2 =新生(22,“Lisi”);
嘗試{
file output stream fos = new file output stream(" a . txt ");
object output stream OOS = new object output stream(fos);
OOS . writeobject(stu 1);
OOS . writeobject(stu 2);
OOS . close();
file inputstream fis = new file inputstream(" a . txt ");
ObjectInputStream ois =新的ObjectInputStream(fis);
學生stu3 =(學生)ois . read object();
system . out . println(" age:"+stu 3 . age);
system . out . println(" name:"+stu 3 . name);
} catch(file not found exception e){
// TODO自動生成的catch塊
e . printstacktrace();
} catch (IOException e) {
// TODO自動生成的catch塊
e . printstacktrace();
} catch(ClassNotFoundException e){
// TODO自動生成的catch塊
e . printstacktrace();
}
}
}