transient關鍵字和序列化方式

2021-10-09 12:54:19 字數 636 閱讀 6319

transient原理:

通俗來說,就是將不需要序列化的屬性前新增transient關鍵字,在序列化的時候,有該關鍵字的屬性不會被序列化。序列化就是將物件的狀態儲存在硬碟上,在需要的時候讀出來使用。有些時候是不希望某個物件在網路上傳輸,寫入到磁碟中的,只希望它的生命週期存在記憶體中,就可以使用transient關鍵字進行修飾。

被transient修飾的變數不能被序列化嗎?

序列化方式:

a. 某個類實現了serializable介面,則該類的所有變數除了靜態變數都會被序列化。

b. 實現exteranlizable介面。需要重寫writeexternal和readexternal方法,效率比serializable高,它可以決定哪些屬性需要序列化(即使被transent修飾),哪寫屬性不需要序列化。但是如果大量的物件,或者重複物件,效率就比較低了。

是否需要序列化取決於物件是否需要寫入磁碟,比如寫入資料庫的資料對應的實體bean必須序列化。

靜態變數可以被序列化嗎?沒被transent修飾的呢?

靜態變數不會被序列化的。因為靜態變數是全域性區的,被所有的執行緒共享的。

應用場景

實現serilizable介面,將不需要序列化的屬性前新增關鍵字transent就不會序列化到指定目的地。像銀行卡、密碼等資料。

transient關鍵字詳解

一旦變數被transient修飾,變數將不再是物件持久化的一部分,該變數內容在序列化後無法獲得訪問。transient關鍵字只能修飾變數,而不能修飾方法和類。注意,本地變數是不能被transient關鍵字修飾的。變數如果是使用者自定義類變數,則該類需要實現serializable介面。乙個靜態變數不...

Java基礎 transient關鍵字

使用場景 當乙個類實現了serilizable介面,那麼這個類的所有屬性和方法都可以被序列化。但有時,我們不希望有些屬性被序列化,那麼我們可以用transient關鍵字修飾這個屬性。public class user implements serializable public void setus...

transient關鍵字的使用

我們一般使用實現介面serializable或者externalizable來對乙個類進行序列化,二者的區別在於前者是自動序列化的,而後者則需要手動進行序列化,即實現該介面的writeexternal 和 readexternal 方法。transient關鍵字可用於修飾已實現了上述兩個介面的類的成...