鱼遇于池,池涸,相濡以沫,相鞠以湿,不若相忘于海。

while (alive) {
  object state = working & fighting & enjoying & living thanksgiving;
}
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

对象持久化之引言:序列化

Posted on 2005-08-15 22:41  alittlefish  阅读(959)  评论(1编辑  收藏  举报


最近在研究Object Persistent,必须承认,之前我对这个方面知之甚少,所谓研究,应该换为学习来的更好一点。听棠的SmartPersistenceLayer好象是园子里不错的一个相关的东西,我没有去下载,感觉先应该就基础的内容有个认识以后再做研究。

初探
先不说对象持久性的具体概念,先以一些相关技术从侧面来了解一下她的应用。如题,我先以.net中的序列化(Serialization)展开本文的讨论。

序列化是什么
Serialization是一个将对象中的数据转换成一个单一元素(通常是Stream)的过程。它的逆过程是Deserialization。Serialization的核心概念是将一个对象的所有数据看作一个独立的单元。
简言之,序列化是指将对象实例的状态存储到存储媒体的过程。详细介绍见:http://www.microsoft.com/china/msdn/archives/library/dndotnet/html/objserializ.asp
就本文而言,她是.NET中一种实现对象持久性(Persistent)的机制。

什么时候需要用序列化
一般说来,在两种情况下非常需要Serialization:
·当我们希望能够将对象当前的状态完整地保存到存储介质中,以便我们以后能够精确地还原对象时;
·当我们希望将对象从一个应用程序空间(Application domain)传递到另一个应用程序空间时。例如,Windows Form程序就是利用Serialization机制来实现剪贴板的copy & paste的。

多种不同的序列化方式
.Net Framework中提供了三种序列化对象的方法:
1. Binary Serialization
2. SOAP Serialization
3. XML Serialization

根据序列化的程度不同,还分为以下两种:
1. Shallow Serialization
    只将对象公开(可读写)的成员转换为字节流,而内部(私有)成员不被转换,Xml Serialization就是这类序列化。
2. Deep Serialization
    这种序列化方式比Sallow Serialization更彻底,它将对象的私有成员的实际值也转换为字节流,也就是说他序列化的是整个对象的所有内容,如果该对象包含对其他对象的引用,则这类序列化也会将被引用的对象转换成字节流。Binary Serialization和SOAP Serialization都是采用的这种方式。

序列化在对象持久技术性中所起的作用
由于本文是对象持久化的角度窥视.net中的序列化,所以对于序列化的过程不作熬述。直接谈谈其在对象持久性技术中扮演的角色。这里就不得不简单介绍一下对象持久性的基本概念了。

(写一半,先保存着,突然要做方案,抽空再来写完它)