java.io.ObjectInputStream類詳解


 

1.public class ObjectInputStream extends InputStream implements ObjectInput, ObjectStreamConstants
分析:ObjectInputStream是將對象的原始數據序列化,ObjectOutputStream將序列化的數據反序列化。當分別使用FileInputStream和FileOutStream做為輸入和輸出流ObjectInputStream和ObjectOutputStream是可以提供持久化的應用程序。ObjectInputStream 用於恢復先前序列化的對象,其它的用途包括主機之間使用socket流傳遞對象、遠程系統調用。

ObjectInputStream 確保所有的對象類型跟Java虛擬機中的一樣,使用標准機制按要求加載。

只有對象支持java.io.Serializable或java.io.Externalizable接口的才能夠被從流中讀取。

方法readObject是被用來從流中讀取對象,java的安全性應該被用來獲取想要的類型,在Java中,string和arrays在序列化時是被當做對象,讀取時把它們轉換成期望的類型。

原始數據類型可以直接使用DataInput接口中期望的方法讀取。

默認的反序列化機制是恢復每個字段在寫入的時候的值,字段聲明為transient或static是會被反序列化進程忽略掉的,對其它對象的引用會使在必要的時候從流中讀取,使用引用共享機制正確的恢復對象,反序列化時新的對象會被創建,以防止現有對象被覆蓋。

讀取對象類似於運行新對象的構造函數,內存被分配給對象並初始化為零(null),非序列化類的無參構造函數被調用然后序列化字段的類是從流中恢復。

例如:從示例中的流中讀取ObjectOutputStream:

FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);

int i = ois.readInt();
String today = (String) ois.readObject();
Date date = (Date) ois.readObject();

ois.close();


類通過控制實現java.io.Serializable 和java.io.Externalizable接口來實現序列化。

實現序列化接口允許序列化對象保存和恢復實體狀態並且它允許類在流寫入時間和寫入的時間之間演進,它自動遍歷對象之間的引用,保存和恢復實體的狀態。

序列化的類,需要特殊處理的序列化和反序列化過程中應實現以下的方法:

private void writeObject(java.io.ObjectOutputStream stream)
throws IOException;
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;


readObject方法負責閱讀和使用相應的writeObject方法流寫入的數據恢復其特定的類的對象的狀態。該方法不需要擔心其屬於超類或者子類的狀態,狀態的恢復是從ObjectInputStream 中讀取的字段和對象,讀取原始數據類型是被DataInput接口支持的。
————————————————

原文鏈接:https://blog.csdn.net/yaomingyang/article/details/79345985


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM