1. 程式人生 > >#Java之Object流與序列化,看完提高3成開發效率

#Java之Object流與序列化,看完提高3成開發效率

Object流與序列化

這個也很簡單,java提供了ObjectOutputStream和ObjectInputStream用來對整個物件進行讀寫。

但是記住:

(1)物件類必須序列化,即實現Serializable介面,才能整個讀寫。

(2)如果物件的成員變數前加上transient關鍵字,則該成員變數不能寫入其值。

我們直接看個例子吧。如下:

如果有想學習java的程式設計師,可來我們的java學習扣qun:94311,1692免費送java的視訊教程噢!我整理了一份適合18年學習的java乾貨,送給每一位想學的小夥伴,並且每天晚上8點還會在群內直播講解Java知識,歡迎大家前來學習哦。

java之Object流與序列化,看過之後恍然大明白

java之Object流與序列化,看過之後恍然大明白

輸出結果:

java之Object流與序列化,看過之後恍然大明白

如果,在T這個類中,double k=0.6789;改成了transient double k=0.6789;那麼輸出結果為

java之Object流與序列化,看過之後恍然大明白

另外還有一個介面,叫externalizable介面,也是用來把物件序列化的。它是你可以控制物件是怎麼序列化的,這個介面我們一般用不到。

======================================

說明:

(1)如果某類是可序列化的,則它的子類也自動可以序列化。

(2)當物件被序列化的時候,它的例項變數,無論例項變數是什麼(基本型別或者是另外一個物件),也會被序列化,從而被儲存。因此需要注意例項變數如果是另外的物件,則該類物件一定要是可序列化的,即實現了Serializable介面。

(3)java允許出現父類不可序列化,但是其子類可序列化的情況。

(4)在將序列化的物件進行讀取恢復的時候,每次呼叫readObject()都會從檔案中讀出下一個物件,讀取的順序與存入

的順序相同。

比如你向”object.txt"儲存了三個物件,依次是dog,cat,duck。那麼在讀取恢復時如下:

Dog d =(Dog) ois.readObject();

Cat c = (Cat) ois.readObject();

Duck ck = (Duck) ois.readObject();

(5)物件被恢復時,被transient標記的例項變數,如果是一個物件,則被賦值為null,如果是基本型別,則被賦值為

預設值。

(6)物件序列化儲存的時候,靜態變數不會序列化儲存,因為靜態變數屬於類,不是從屬於某個物件嘛!當物件被

還原時,靜態變數為維持在類中原本的樣子。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++