1.概念:允許把內(nèi)存中的JAVA 對(duì)象轉(zhuǎn)換為與平臺(tái)無關(guān)的二進(jìn)制流,從而允許把這種二進(jìn)制流持久的保存在硬盤上,或通過網(wǎng)絡(luò)將這種二進(jìn)制流傳輸?shù)搅硪粋€(gè)網(wǎng)絡(luò)節(jié)點(diǎn),當(dāng)其他程序獲取了這種二進(jìn)制流,可以恢復(fù)成原來的JAVA對(duì)象
2.序列化的好處在于可以將任何實(shí)現(xiàn)Serializable接口的對(duì)象轉(zhuǎn)換為字節(jié)數(shù)據(jù),使其在保存和傳輸時(shí)可以被還原
3.序列化是RMI(Remote Method lnvoke-遠(yuǎn)程方法調(diào)用)過程的參數(shù)和返回值都必須實(shí)現(xiàn)的機(jī)制,而RIM是JAVAEE的基礎(chǔ)掂墓。因此序列化機(jī)制是JAVAEE平臺(tái)的基礎(chǔ)
4.想要對(duì)象序列化,那么對(duì)應(yīng)的類必須實(shí)現(xiàn)Serializable或Externalizable接口(其中之一)
ps:static 或者 transient 修飾的屬性無法被序列化,不會(huì)報(bào)錯(cuò),但是讀取的時(shí)候值為null
凡是實(shí)現(xiàn)了Serializable接口的類 都有一個(gè)表示序列化版本標(biāo)識(shí)符的靜態(tài)常量
private static final long serialVersionUID
serialVersionUID用來表明類的不同版本的兼容性
如果類沒有定義這個(gè)變量,那么它的值是JAVA運(yùn)行時(shí)環(huán)境根據(jù)類的內(nèi)部細(xì)節(jié)自動(dòng)生成,若類的源代碼做了修改那么serialVersionUID可能會(huì)變
作用
希望類的不同版本對(duì)序列化兼容,因此要確保類的不同版本具有相同的serialVersionUID
不希望類的不同版本對(duì)序列化兼容,因此要確保類的不同版本具有不同的serialVersionUID
白話文:假如在磁盤的文件中寫入一個(gè)對(duì)象沒有給serialVersionUID值的話 java 會(huì)自動(dòng)給它一個(gè) 如果類的內(nèi)容發(fā)生修改 那么他的serialVersionUID會(huì)變 ,之前的那個(gè)可能就找不到了