使用對象流實現序列化


(一)bjectOutputStream對象輸出流 ,將對象保存到磁盤或者通過網絡傳輸

對象字節輸出流、將一個序列化的對象寫入到構造ObjectOutputStream時傳入的底層字節輸出流中、通過源碼可以看出、他雖然不是實現了FilterOutputStream裝飾類、同時實現了ObjectOut、而此接口實現了DataOut接口、並且對這個接口進行了擴展、使得ObjectOut在具有DataOut中定義的各種方法同時、也具有將對象、數組、字符串寫入到底層字節流中的功能、這樣也就意味着ObjectOutputStream同樣具有DataOutputStream功能的同時也具有將對象、數組字符串寫入到底層字節輸出流中的功能、當然ObjectOuputStream同樣還實現了別的接口、因爲他寫入一個對象的時候、不僅僅寫入的是標示這個Object的所有屬性、同時還有額外的一些信息、比如版本號、作者等、但是這些對我們是透明的、具體的寫入方法由JDK說了算、從這裏也可以看出ObjectOutputStream與DataOutputStream之間的差異、1、ObjectOutputStream是將一個對象的所有相關屬性、信息(不包括方法)寫入到底層流中、而DataOutputStream一次寫入的只是一個java基礎類型的數據、2、讀取的時候ObjectOutputStream一次讀取一個對象、不必關心對象每個屬性的寫入順序、而DataOutputStream讀取時要嚴格按照寫入時的順序讀取(當然、在使用skip方法時還要考慮字節數)、有關序列化的有另一篇文章說明、總結時候也會給出一點有關序列化的認識。



常用方法:1/**
     * Flushes the stream. This will write any buffered output bytes and flush
     * through to the underlying stream.
     *
     * @throws  IOException If an I/O error has occurred.
     */
    // 刷新該流的緩衝、這裏也會將底層流中的數據flush到底層流指定的目的地中。
    public void flush() throws IOException {
        bout.flush();
    }
void write(byte[] buf);     寫入一個 byte 數組。

void write(byte[] buf, int off, int len);       寫入字節的子數組。

void write(int val);        寫入一個字節。

void writeBoolean(boolean val);     寫入一個 boolean 值。

void writeByte(int val);        寫入一個 8 位字節。

void writeBytes(String str);        以字節序列形式寫入一個 String。

void writeChar(int val);        寫入一個 16 位的 char 值。

void writeChars(String str);        以 char 序列形式寫入一個 String。
 

void writeDouble(double val);       寫入一個 64 位的 double 值。

void writeFields();     將已緩衝的字段寫入流中。

void writeFloat(float val);     寫入一個 32 位的 float 值。

void writeInt(int val);     寫入一個 32 位的 int 值。

void writeLong(long val);       寫入一個 64 位的 long 值。

void writeObject(Object obj);       將指定的對象寫入 ObjectOutputStream。


void writeShort(int val);       寫入一個 16 位的 short 值。

void writeUTF(String str);      以 UTF-8 修改版格式寫入此 String 的基本數據。


ObjectOutputStream、ObjectInputStream這對流本質上就是操作序列化對象、用於在介質間進行傳遞序列化對象的屬性、當然、當我們想要保存對象的某個屬性的時候可以使用DataOutputStream、DataInputStream這對流、但是當我們要保存的屬性恰好組成了一個對象、並且這個對象還有版本、作者等信息時、DataOutputStream這對流就不能滿足我們了、其實如上面所說、ObjectInputStream這對流也是間接實現了DataOutputStream這對流的接口、並且中間穿插了一個ObjectOut這對接口、這對接口對DataOut這對進行了擴展、滿足傳輸對象、數組、字符串。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章