1. 乙個類可序列化的前提:實現serializable介面
2. 乙個屬性不想序列化的方式:增加transient關鍵字
3. serialversionuid 是表示乙個類的序列化標識,和乙個類的類名以及包路徑一起組成類在序列化時的唯一標識。
4. 當兩個jvm中存在serialversionuid+類名+包路徑一致的類時,這兩個jvm可以通過序列化達到此類資料共享的目的。
5. 當設定serialversionuid為1l時,指代忽略serialversionuid 的校驗。
6. static屬性儲存在方法區,不參與序列化過程(只有堆記憶體才會序列化,因此獲取值都是直接從方法區獲取)。
7. static如果在宣告期間對值進行了初始化,則會參與序列化。
8. static和transient同時修飾,transient會被忽略。
9. final 屬性直接通過值參與序列化過程,加transient不會生效。
10. 序列化時,如果對乙個物件多次序列化,只有第一次儲存物件狀態,之後都會儲存該物件的引用。
11. 序列化時,如果父類沒有實現序列化介面,則父類狀態不會序列化。
12. 反序列化時,並不呼叫建構函式。
13. 反序列化時,如果父類沒有實現序列化介面,則會呼叫父類的無參建構函式生成乙個父類物件。
14. 可以定製序列化規則,有三種方案,如下:
1. 自定義writeobject,readobject方法(ps:方法的訪問許可權必須為private
)2. 實現externalizable的writeexternal,readexternal方法(ps:必須實現externalizable才行)
3. 自定義writereplace,readresolve方法
三種方案的優先順序:
1. 序列化: writereplace > writeexternal > writeobject
2. 反序列化:readresolve > readexternal > readobject
@slf4j
@data
public
class
test
implements
serializable
, externalizable ';}
public
static
void
main
(string[
] args)
throws interruptedexception "
, test)
; test test1;
try(fileoutputstream fos =
newfileoutputstream
("e:");
objectoutputstream oos =
newobjectoutputstream
(fos)
; fileinputstream fis =
newfileinputstream
("e:");
objectinputstream ois =
newobjectinputstream
(fis))"
, test1);}
catch
(exception e)
}private
void
writeobject
(objectoutputstream out)
throws ioexception
private
void
readobject
(objectinputstream in)
throws ioexception, classnotfoundexception
@override
public
void
writeexternal
(objectoutput out)
throws ioexception
@override
public
void
readexternal
(objectinput in)
throws ioexception, classnotfoundexception
public object writereplace()
public object readresolve()
}
Unity序列化一些內容
序列化又稱序列化,是.net執行時環境用來支援使用者定義型別的流化的機制。其目的是以某種儲存形式使自定義物件持久化,或者將這種物件從乙個地方傳輸到另乙個地方。簡單來說就是將物件儲存到檔案中。如unity的場景檔案和預製體預設就是以二進位制的檔案儲存在工程目錄下。在unity中,在檢視面板中可以看到的...
序列化和反序列化的一些注意事項
序列化就是將物件儲存到磁碟中 反序列化就是將物件讀取出來 注意事項 1.想要讓乙個物件能夠進行序列化,需要將這個物件所屬的類實現乙個標記介面 serializable 2.如果序列化後,這個類進行了修改,反序列時會報錯 會丟擲 invalidclas ception異常 可以在這個類中加privat...
Serializable 序列化筆記
網路通訊中以位元組傳輸 資料的儲存 實現serializable 介面 實現externalizable 介面,其中externalizable 介面繼承了serializable 介面 1 user 類實現serializable 介面,新增生成serialversionuid public cl...