關鍵字transient的理解使用

    java在序列化過程中,把java對象轉換爲二進制進行數據傳輸。一般使用在數據持久化/rmi/rpc遠程調用。可以通過反序列化獲取保存的數據信息。一般通過實現serializable接口自動序列。可以手動顯示的生命serialVersionUID = 1L,系統也提供了默認的序列號,這個序列號是根據類編譯的信息生成的,只要class文件沒有改變,序列號也不會改變。切切。java在序列化和反序列化操作中通過序列號判斷信息一致性,如果序列號不一致,操作失敗。

    java爲serializable提供了默認的序列化和反序列化的方法,objectOutPutstream的defaultWriteObject()和objectInputStream的defaultReadObject();開發人員自己可以重新定義writeObject()和readObject()方法來自己控制序列化和反序列化過程;系統在做序列化時,首先調用本類的writeObject()和readObject()方法,如果不存在,則調用java提供的default方法。

   序列化後保存的對象的值和類型,靜態變量不參與序列化。被聲明爲transient的屬性不參與序列化;

    Externalizable是serializable子類,需要手動序列,要自己實現writeExterna(ObjectOutPut out)和readExternal(ObjectInput in)的操作。

    transient關鍵字一般使用在序列化過程中,使用transient修飾的字段不參與序列化;修飾字段屬性,不可用在類和方法上;

延伸使用

    在arraylist中只有兩個屬性(其他幾個屬性爲常量),一個是transient  Object[]element ,一個是private int size;

因爲list底層基於動態數組實現的,java默認的arraylist的數組長度爲10,在初始化時候數組已經存在了,如果數組只有3個元素,把整個數組做序列化處理浪費空間資源。所以arraylist自己實現了writeObject()和readObject()方法。只需要序列化實際存在的元素即可

 

 

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