1.對象的持久化(Persistence)
對象持久化就是讓對象的生存期超越使用對象的程序的運行期。將對象存儲在可持久保存的存儲介質上,在實際應用中,運用相應的對象持久化框架,將業務數據以對象的方式保存在數據庫中,如比較早的Hibernate。在一定周期內保持不變就是持久化,持久化是針對時間來說的。數據庫中的數據就是持久化了的數據,只要你不去刪除或修改。比如在IE浏覽器中一次Session會話中Session對象變量也是不變的,是Session容器中持久化。對象持久化的方式有很多種,根據周期不同有,page,Session,Application。
通俗點理解就是,把對象當做一快鮮肉,不做持久化處理,這塊肉很快就是變質不能用了,做持久化處理,就會把鮮肉放到冷庫中保存,這樣可以保存相當長的時間。
持久化是一種對象服務,就是把內存中的對象保存到外存中,讓以後能夠取回。需要實現至少3個接口:
void Save(object o) 把一個對象保存到外存中
Object Load(object oid) 通過對象標識從外存中取回對象
boolExists(object oid) 檢查外存中是否存在某個對象
為什麼需要持久化服務呢?那是由於內存本身的缺陷引起的:
內存掉電後數據會丟失,但有一些對象是無論如何都不能丟失的,比如銀行賬號,遺憾的是,人們還無法保證內存永不掉電。內存過於昂貴,與硬盤、磁帶、光盤等外存相比,內存的價格要高2~3個數量級,而且維持成本也高,至少需要一直供電吧。所以即使對象不需要永久保存,也會因為內存的容量限制不能一直呆在內存中,需要持久化來緩存到外存。
2.對象的序列化(Serialization)
JVM 向我們屏蔽了內存操作相關的信息,我們並不知道數據是以什麼樣的形式來存儲和組織的,當對象需要進行傳輸時,java提供了序列化的方法方便我們對數據進行傳輸操作。對象序列化後的數據格式可以是二進制,可以是XML,也可以是JSON等任何格式,反序列化則是相反的操作。序列化是為了解決對象的傳輸問題,當傳輸一個對象時,則需要實現2個接口:
void Serialize(Stream stream,object o) 把對象序列化到流中
object Deserialize(Stream stream) 把流反序列化成對象
這種傳輸可以是線程之間、進程之間、內存外存之間、主機之間的,凡是可以持久化的對象都可以序列化。
總的來說,對象持久化和對象序列化是兩個完全不同的應用場景,盡管你也可以說將一個對象序列化後存儲在數據庫中,但是你也不能說是對象持久化。