一個(gè)對象序列化的接口,一個(gè)類只有實(shí)現(xiàn)了Serializable接口,它的對象才是可序列化的。因此如果要序列化某些類的對象,這些類就必須實(shí)現(xiàn)Serializable接口。而實(shí)際上,Serializable是一個(gè)空接口,沒有什么具體內(nèi)容,它的目的只是簡單的標(biāo)識(shí)一個(gè)類的對象可以被序列化。
什么情況下需要序列化 a)當(dāng)你想把的內(nèi)存中的對象寫入到硬盤的時(shí)候; b)當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對象的時(shí)候; c)當(dāng)你想通過RMI傳輸對象的時(shí)候; 再稍微解釋一下:a)比如說你的內(nèi)存不夠用了,那計(jì)算機(jī)就要將內(nèi)存里面的一部分對象暫時(shí)的保存到硬盤中,等到要用的時(shí)候再讀入到內(nèi)存中,硬盤的那部分存儲(chǔ)空間就是所謂的虛擬內(nèi)存。在比如過你要將某個(gè)特定的對象保存到文件中,我隔幾天在把它拿出來用,那么這時(shí)候就要實(shí)現(xiàn)Serializable接口; b)在進(jìn)行java的Socket編程的時(shí)候,你有時(shí)候可能要傳輸某一類的對象,那么也就要實(shí)現(xiàn)Serializable接口;最常見的你傳輸一個(gè)字符串,它是JDK里面的類,也實(shí)現(xiàn)了Serializable接口,所以可以在網(wǎng)絡(luò)上傳輸。 c)如果要通過遠(yuǎn)程的方法調(diào)用(RMI)去調(diào)用一個(gè)遠(yuǎn)程對象的方法,如在計(jì)算機(jī)A中調(diào)用另一臺(tái)計(jì)算機(jī)B的對象的方法,那么你需要通過JNDI服務(wù)獲取計(jì)算機(jī)B目標(biāo)對象的引用,將對象從B傳送到A,就需要實(shí)現(xiàn)序列化接口。 沒有人說的話能全部準(zhǔn)確,批判性的參考。
|