Java的對象序列化以及文件IO處理 – JAVA編程語言程序開發技術文章

1.對象的序列化就是保存對象的當前狀態。


2.保存對象的狀態有兩種主要的方式: 


1)  對象序列化 (將對象寫入到文件 ,以後再反序列化 ,見後例 )


如果保存的數據用於 Java程序內交互,則采用對象的序列化;


2)  寫入文件 (將對象寫入到文本文件 ,註意 ,是 文本文件 )


如果保存的數據用於和其他非 Java程序交互,則保存到文本文件。


3.對象如果需要序列化,則它所在的類必須要實現 Serializable接口。


     如果某類是可序列化的,則它的子類自動地可以序列化。


4.對象序列化的步驟:


1) 創建文件輸出流;


2) 創建對象輸出流;


3) 寫入對象狀態;


4) 關閉對象輸出流;

//1.創建文件輸出流

FileOutputStream fs = new FileOutputStream(“OutputFile.file”);

//2.創建對象輸出流

ObjectOutputStream os = new ObjectOutputStream(fs);

//3.寫入對象狀態

os.writeObject(characterOne);
os.writeObject(characterTwo);
os.writeObject(characterThree);

//4.關閉對象輸出流

os.close();


對象寫入文件的順序為:



其中, ObjectOutputStream是把對象轉換成字節流; FileOutputStream是把字節流寫入文件。


5.序列化對象會把對象的所有屬性保存,被對象的實例變量所引用的對象也會被序列化。


     如果某實例變量不能或不應該被序列化,則把這個變量標記為 transient。將屬性標記為 transient 後,對象序列化時會將該屬性保存為 null值。


6.對象解序列化的步驟:


1) 創建文件輸入流;


2) 創建對象輸入流;


3) 讀出對象狀態;


4) 轉換對象類型(因為對象讀出後為 Object類型);


5) 關閉對象輸入流;

//1.創建文件輸入流
,如果文件不存在
,則程序拋出異常

FileInputStream fs = new FileInputStream(“OutputFile.file”);

//2.創建對象輸入流

ObjectInputStream oi = new ObjectInputStream(fs);

//3.讀出對象狀態

Object one = oi.readObject();
Object two = oi.readObject();
Object three = oi.readObject();

//4.轉換對象類型

GameCharacter elf = (GameCharacter) one;
GameCharacter troll = (GameCharacter) two;
GameCharacter magician = (GameCharacter) three;

//5.關閉對象輸入流

oi.close();


對象寫出的順序為:


 


在對象讀出到對象輸入流後, JVM會嘗試查找和加載對象的類,如果不成功則報異常。


7. 對象被還原時,靜態變量維持類中原本的樣子,而不是存儲時的樣子。


8.將對象狀態寫入文件的步驟:(使用 BufferedWriter)

//先用緩沖區存放數據
,然後鏈接到文件

BufferedWriter writer = new BufferedWriter(new FileWriter(aFile));
//寫入數據

writer.write(“blabla”);
//關閉

writer.close();


對象寫入文件的順序:


 


      使用緩沖區 Writer的原因:如果直接使用 FileWriter的話,寫硬盤需要好多次,速度較

發佈留言