天天看點

transient關鍵字

transient

transient是短暫的意思。

對于transient 修飾的成員變量,在類的執行個體對象的序列化處理過程中會被忽略。 是以,transient變量不會貫穿對象的序列化和反序列化,生命周期僅存于調用者的記憶體中而不會寫到磁盤裡進行持久化。

序列化

序列化使用<code>objectoutputstream.writeobject(e)</code>方法。

transient關鍵字

反序列化使用<code>objectinputstram.readobject()</code>方法

transient關鍵字

<code>static</code>修飾的變量同樣不會序列化!

arraylist中的<code>transient</code>:

transient關鍵字

為什麼arraylist還能序列化呢?

很簡單,重寫riteobject()和readobject()方法就好了

又有一個問題,既然想序列化,arraylist為什麼又要使用transient呢?

因為容量的問題,elementdata裡面有一些元素是空的,這種是沒有必要序列化的。是以使用transient屏蔽數組,使用預設方法将其他屬性序列化之後,在單獨處理elementdata[] 我們來看看arrallist源碼重寫的的writeobject(),可以看到,它先把除了transient element[]之外的屬性序列化,然後單獨處理element[size](非空元素)。
transient關鍵字