《.NET4.0 面向对象编程漫谈》读书笔记 ——第13章 对象的复制与序列化
2011-05-24 14:16
239 查看
第13章 对象的复制与序列化
【简介】:序列化技术是学习分布式软件系统开发技术(如WCF)的前提之一,本章主要介绍对象的浅复制与深复制、对象的序列化、对象序列化应用等。
第一节 对象的浅复制与深复制
1、 浅复制:是指当对象的字段值被复制时,字段引用的对象不会被复制。
例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅复制,那麽两个对象将引用同一个字符串。
2、 深复制:是对对象事例中字段引用的对象也进行复制的一种方式。
例如,如果一个对象有一个指向字符串的字段,并且对该对象做了一个深复制的话.我门将创建一个新的对象和一个新的字符串.新对象将指向新字符串。
3、.NET中默认的对象复制方式为浅复制,我们可以通过两种方式实现深复制。
A、类实现Icloneable接口。
B、对象序列化技术。
第二节 对象序列化
对象序列化主要解决对象状态的保存问题,而对象状态指某一时刻对象所拥有的各个字段的集合。
1、 定义:将一个内存中的对象保存到流中,并在需要时从流中重新读取数据重建对象的过程称为对象的序列化与反序列化。
用于保存对象序列化的存储介质是流(Stream),它代表一连串有顺序的二进制数据。
2、.NET基类库的流类型有:NetworkStream、FileStream、PipeStream、MemoryStream。它们的父类为Stream。
3、读写流中的数据的两组辅助类:
A、BinaryReader 和 BinaryWriter
B、StreamReader 和 StreamWriter
4、序列化有两种形式:二进制序列化与XML序列化。
前者指将对象的数据以二进制形式直接写入流中,后者指用XML方式写入流中。其中XML序列化速度较慢、生成的数据量较大、安全性不如二进制序列化。
5、BinaryFormatter类进行二进制序列化,SoapFormatter类进行XML序列化。
6、.NET中提供标记可控制序列化(或反序列化)过程。
A、[OnSerializedAttribute]:在序列化完成后调用。
B、[OnSerializingAttribute]:在序列化进行时调用。
C、[OnDeserializedAttribute]:在反序列化完成后调用。
D、[OnDeserializingAttribute]:在反序列化进行时调用。
E、[NonSerialized]:指字段不参与序列化。
第三节 对象序列化技术应用实例
1、可大批量地复制对象。
要点:不将其序列化到文件中,而将其序列化到内存流中。此完成的是“深复制”。
2、程序退出时保存状态。
3、WPF对象的XAML序列化。
XAML代码可看成是WPF对象序列化后的结果。
4、ASP.NET视图状态剖析:
正是借助序列化技术,解决了asp.net中对象(控件)状态保存的问题。
【简介】:序列化技术是学习分布式软件系统开发技术(如WCF)的前提之一,本章主要介绍对象的浅复制与深复制、对象的序列化、对象序列化应用等。
第一节 对象的浅复制与深复制
1、 浅复制:是指当对象的字段值被复制时,字段引用的对象不会被复制。
例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅复制,那麽两个对象将引用同一个字符串。
2、 深复制:是对对象事例中字段引用的对象也进行复制的一种方式。
例如,如果一个对象有一个指向字符串的字段,并且对该对象做了一个深复制的话.我门将创建一个新的对象和一个新的字符串.新对象将指向新字符串。
3、.NET中默认的对象复制方式为浅复制,我们可以通过两种方式实现深复制。
A、类实现Icloneable接口。
B、对象序列化技术。
第二节 对象序列化
对象序列化主要解决对象状态的保存问题,而对象状态指某一时刻对象所拥有的各个字段的集合。
1、 定义:将一个内存中的对象保存到流中,并在需要时从流中重新读取数据重建对象的过程称为对象的序列化与反序列化。
用于保存对象序列化的存储介质是流(Stream),它代表一连串有顺序的二进制数据。
2、.NET基类库的流类型有:NetworkStream、FileStream、PipeStream、MemoryStream。它们的父类为Stream。
3、读写流中的数据的两组辅助类:
A、BinaryReader 和 BinaryWriter
B、StreamReader 和 StreamWriter
4、序列化有两种形式:二进制序列化与XML序列化。
前者指将对象的数据以二进制形式直接写入流中,后者指用XML方式写入流中。其中XML序列化速度较慢、生成的数据量较大、安全性不如二进制序列化。
5、BinaryFormatter类进行二进制序列化,SoapFormatter类进行XML序列化。
6、.NET中提供标记可控制序列化(或反序列化)过程。
A、[OnSerializedAttribute]:在序列化完成后调用。
B、[OnSerializingAttribute]:在序列化进行时调用。
C、[OnDeserializedAttribute]:在反序列化完成后调用。
D、[OnDeserializingAttribute]:在反序列化进行时调用。
E、[NonSerialized]:指字段不参与序列化。
第三节 对象序列化技术应用实例
1、可大批量地复制对象。
要点:不将其序列化到文件中,而将其序列化到内存流中。此完成的是“深复制”。
2、程序退出时保存状态。
3、WPF对象的XAML序列化。
XAML代码可看成是WPF对象序列化后的结果。
4、ASP.NET视图状态剖析:
正是借助序列化技术,解决了asp.net中对象(控件)状态保存的问题。
相关文章推荐
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第14章 对象间的协作与信息交换
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第11章 对象集合与LINQ
- 使用序列化和反序列化机制深度复制对象 (转)
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第8章 神奇的委托
- 对象序列化(五):应用实例->大批量复制对象
- 用对象序列化来实现对象的复制
- 以clone和序列化方式实现对象复制
- 《.NET4.0 面向对象编程漫谈》读书笔记 目录
- java 复制对象 (克隆接口 与 序列化)
- 使用序列化和反序列化机制深度复制对象 (转)
- effective C++ 12_复制对象时勿忘其每一个成分 读书笔记
- C#2008与.NET 3.5 高级程序设计读书笔记(21)-- 对象序列化
- java中复制对象通过反射或序列化
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第7章 程序集
- 关于Java对象复制(Clone、深度Clone以及序列化与反序列化的使用)
- 对象的深复制与浅复制 实现Cloneable接口实现深复制 序列化实现深复制
- 文件复制、对象可序列化存储
- 黑马程序员--File类删除目录,复制目录。打印流(装饰类),对象的序列化流,集合IO的结合使用
- java hasmap对象的深复制实现:字节码复制和对象序列化成字符串复制比较。
- 《.NET4.0 面向对象编程漫谈》读书笔记 ——第10章 异步编程模式