關於java web中的序列化問題Serializable

今天在自學java web時候,發現老師都會實現這樣一句話:

private static final long serialVersionUID = 1L;  一直不是很理解啥意思

特查找到如下解釋,以及 相關的序列化知識:

serialVersionUID作用 序列化時爲了保持版本的兼容性,即在版本升級時反序列化仍保持對象的唯一性。 有兩種生成方式: 一個是默認的1L,比如:private static final longserialVersionUID = 1L; 一個是根據類名、接口名、成員方法及屬性等來生成一個64位的哈希字段,比如: private static final long serialVersionUID = xxxxL; 當你一個類實現了Serializable接口,如果沒有定義serialVersionUIDEclipse會提供這個 提示功能告訴你去定義

Serialize 是什麼?

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

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


JavaBean爲什麼要繼承java.io.Serializable接口實現序列化?

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

web服務器通常將那些暫時不活動但未超時的HttpSession對象轉移到文件系統或數據庫中保存,服務器要使用他們時再將他們從文件系統或數據庫中裝載入內存,這種技術稱爲Session的持久化。

將HttpSession對象保存到文件系統或數據庫中,需要採用序列化的方式將HttpSession對象中的每個屬性對象保存到文件系統或數據庫中;將HttpSession對象從文件系統或數據庫中裝載如內存時,需要採用反序列化的方式,恢復HttpSession對象中的每個屬性對象。所以存儲在HttpSession對象中的每個屬性對象必須實現Serializable接口。當然如果不是存儲在session中的JavaBean可以不用存儲。下半部分參考如下:http://blog.csdn.net/bz151531223/article/details/48792307

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章