日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java开发:什么是序列化?

發(fā)布時間:2025/3/15 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java开发:什么是序列化? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1系列化(Serialize)是干什么的?

? ? ? ?這是IO存儲中的一個概念。計算機中所有的內(nèi)容都是0或者1的數(shù)字。這些數(shù)字按順序排列,便可以表示計算機中的萬事萬物,當然Java的對象也不例外。在內(nèi)存中,無論如何表示,對我們的操作都沒有影響,所以我們不必關心。但是,當我們需要把對象存儲到硬盤、數(shù)據(jù)庫或其它相關介質(zhì)時,我們就需要考慮這個表示格式或者轉(zhuǎn)化方法。

Java的對象要如何轉(zhuǎn)化為這0、1的序列呢?就是靠序列化,使用java.io.ObjectOutputStream類即可完成復雜的轉(zhuǎn)化工作,但ObjectOutputStream類可以支持的只有實現(xiàn)了Serializable接口的對象,如果沒有實現(xiàn)Serializable接口,則會拋出NotSerializableException。你希望序列化的類中,常常可能參雜了一些臨時性成員變量或者一些你并不希望它們被存儲下來的屬性,這些成員變量或者屬性,就需要用transient關鍵字修飾。它們會在序列化時被忽略。當從存儲介質(zhì)中讀取并還原成對象時,他們會被還原為屬性的默認值(基本類型為0或false,對象為null)

?????? 序列化簡單來說就保存對象在內(nèi)存中的狀態(tài)也可以說是實例化變量。這是Java提供的用來保存 Object state,一種保存對象狀態(tài)的機制。只有實現(xiàn)了serializable接口的類的對象才能被實例化。


2什么情況下會用到序列化?


???? 1當你想把內(nèi)存中的對象寫入到硬盤時

???? 2當你想用套接字在網(wǎng)絡上傳輸對象時

???? 3當你想通過RMI調(diào)用對象時

??? (RMI是什么東西?):RMI總結(jié)來說就是遠程調(diào)用對象,在一個jvm上調(diào)用另一個jvm的對象。

?

3序列化需要注意的事項

???? 1序列化只保存對象的狀態(tài),而不管對象的方法。

???? 2當一個父類實現(xiàn)了序列化,它的子類也自動實現(xiàn)序列化,不用顯示進行實現(xiàn)了。

???? 3當一個實例對象引用其他對象,當序列化該對象時也把引用的對象進行了實例化。

個人總結(jié):serializable接口就是Java提供用來進行高效率的異地共享實例對象的機制,實現(xiàn)這個接口即可。

?

4JavaBean為什么要實現(xiàn)java.io.Serializable接口實現(xiàn)序列化?

public interface Serializable { }

客戶端訪問了某個能開啟會話功能的資源, web服務器就會創(chuàng)建一個與該客戶端對應的HttpSession對象,每個HttpSession對象都要站用一定的內(nèi)存空間。如果在某一時間段內(nèi)訪問站點的用戶很多,web服務器內(nèi)存中就會積累大量的HttpSession對象,消耗大量的服務器內(nèi)存,即使用戶已經(jīng)離開或者關閉了瀏覽器,web服務器仍要保留與之對應的HttpSession對象,在他們超時之前,一直占用web服務器內(nèi)存資源。

web服務器通常將那些暫時不活動但未超時的HttpSession對象轉(zhuǎn)移到文件系統(tǒng)或數(shù)據(jù)庫中保存,服務器要使用他們時再將他們從文件系統(tǒng)或數(shù)據(jù)庫中裝載入內(nèi)存,這種技術稱為Session的持久化。

將HttpSession對象保存到文件系統(tǒng)或數(shù)據(jù)庫中,需要采用序列化的方式將HttpSession對象中的每個屬性對象保存到文件系統(tǒng)或數(shù)據(jù)庫中;將HttpSession對象從文件系統(tǒng)或數(shù)據(jù)庫中裝載如內(nèi)存時,需要采用反序列化的方式,恢復HttpSession對象中的每個屬性對象。所以存儲在HttpSession對象中的每個屬性對象必須實現(xiàn)Serializable接口。當然如果不是存儲在session中的JavaBean可以不用存儲哈。


好處:
a)比如說你的內(nèi)存不夠用了,那計算機就要將內(nèi)存里面的一部分對象暫時的保存到硬盤中,等到要用的時候再讀入到內(nèi)存中,硬盤的那部分存儲空間就是所謂的虛擬內(nèi)存。在比如過你要將某個特定的對象保存到文件中,我隔幾天在把它拿出來用,那么這時候就要實現(xiàn)Serializable接口;
b)在進行java的Socket編程的時候,你有時候可能要傳輸某一類的對象,那么也就要實現(xiàn)Serializable接口;最常見的你傳輸一個字符串,它是JDK里面的類,也實現(xiàn)了Serializable接口,所以可以在網(wǎng)絡上傳輸。
c)如果要通過遠程的方法調(diào)用(RMI)去調(diào)用一個遠程對象的方法,如在計算機A中調(diào)用另一臺計算機B的對象的方法,那么你需要通過JNDI服務獲取計算機B目標對象的引用,將對象從B傳送到A,就需要實現(xiàn)序列化接口。

總結(jié)

以上是生活随笔為你收集整理的Java开发:什么是序列化?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。