Java为什么要序列化
目錄
?
一、什么是序列化和反序列化
二、為什么要序列化
三、序列化和反序列化操作
序列化操作
反序列化操作
四、注意
一、什么是序列化和反序列化
序列化就是把對象變成二進(jìn)制格式的過程。
反序列化就是把二進(jìn)制格式的對象還原成正常對象的過程。
?
二、為什么要序列化
對象序列化無非兩個(gè)原因:
1.用于網(wǎng)絡(luò)傳輸對象
在一臺機(jī)子上,有一個(gè)JVM,那么在同一個(gè)JVM中的不同對象,當(dāng)然可以隨便調(diào)用各自的方法。但假設(shè),從分布式而言,北京的一臺服務(wù)器需要調(diào)用廣州服務(wù)器的一個(gè)對象,怎么辦,兩個(gè)服務(wù)器有不同的JVM,那這時(shí)候只能從廣州服務(wù)器上把該對象進(jìn)行序列化,然后通過網(wǎng)絡(luò)發(fā)送到北京服務(wù)器,然后再反序列化。
2. 用于把對象保存在硬盤中
對象存在于內(nèi)存中,內(nèi)存是關(guān)機(jī)就掉數(shù)據(jù)的設(shè)備。例如玩游戲,要存檔,就可以簡單理解為將當(dāng)前游戲運(yùn)行的所有對象序列化保存到硬盤上,然后你再次玩的時(shí)候,你讀取存檔,就是反序列化,“再弄出這些對象出來”,繼續(xù)運(yùn)行。
?
三、序列化和反序列化操作
1.一個(gè)類想要能被序列化,必須實(shí)現(xiàn)? ?java.io.Serializable? 這個(gè)接口
2.該類的所有屬性必須是可序列化的,如果有一個(gè)屬性不是可序列化的,或者說不想它被序列化,那么可以給這個(gè)屬性用transient修飾。
一個(gè)可被序列化的類如下:
序列化操作
ObjectOutputStream 類用來序列化一個(gè)對象,如下的 SerializeDemo 例子實(shí)例化了一個(gè) Employee 對象,并將該對象序列化到一個(gè)文件中。
該程序執(zhí)行后,就創(chuàng)建了一個(gè)名為 employee.ser 文件。
注意:?當(dāng)序列化一個(gè)對象到文件時(shí), 按照 Java 的標(biāo)準(zhǔn)約定是給文件一個(gè) .ser 擴(kuò)展名。
反序列化操作
利用ObjectInputStream類進(jìn)行反序列化。
四、注意
1.static的變量不能被序列化,因?yàn)閟tatic的變量是屬于類的
2.Transient關(guān)鍵字,主要是控制變量是否能夠被序列化。Transient表示臨時(shí)的意思。
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Java为什么要序列化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 病毒的种类和特征
- 下一篇: 初识Java反序列化