关于序列化的笔记
来源:互联网 发布:建筑电气常用数据手册 编辑:程序博客网 时间:2024/05/17 06:03
对象序列化是将对象(比如Person对象)转换为二进制数据
反序列化是将二进制数据还原为对象。
对象是稍纵即逝的,不仅程序重启、操作系统重启会造成对象的消失,就是退出函数范围等都可能造成对象的消失,序列化/反序列化就是为了保持对象的持久化。就像用DV录像(序列化)和用播放器播放(反序列化)一样。
BinaryFormatter类有两个方法:
void Serialize(Stream stream, object graph) 对象graph序列化到stream中
object Deserialize(Stream stream) 将对象从stream中反序列化,返回值为反序列化得到的对象
序列化:
BinaryForatter bf = new BinaryForatter();
using(Stream stream = File.OpenWrite(@"C:\1.dat"))
{
bf.Serialize(stream, obj);
}
反序列化
using(Stream stream = File.OpenRead(@“C:\1.dat”))
{
object obj = bf.Deserialize(stream);
}
不是所有对象都能序列化,只有可序列化的对象才能序列化,在类声明上添加[Serializable],对象的属性、字段的类型也必须可序列化。
反序列的项目中必须有同样的类,否则不能反序列化。
序列化的应用:
ASP.Net、ViewState、WCF、.Net Remoting、ASP.Net Cache 、集群等。
扩展阅读:
(1)http://www.yaosansi.com/post/1061.html
(2)http://blog.sina.com.cn/s/blog_645752e60100h4w9.html
(面试题)深度拷贝。浅层拷贝。先手写浅层拷贝、深层拷贝的代码,理解了概念再谈用MemberwiseClone 、DeepCopy。见备注
写代码拷贝,实现ICloneable方法,内部调用MemberwiseClone
参考资料http://www.cnblogs.com/liping13599168/archive/2007/07/28/834242.html
static object DeepCopy(object src)
{
BinaryFormatter Formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
using (MemoryStream stream = new MemoryStream())
{
Formatter.Serialize(stream, src);
stream.Position = 0;
return Formatter.Deserialize(stream);
}
}
- 关于序列化的笔记
- 关于序列化和反序列化的笔记
- Python笔记1--关于序列的学习
- 关于序列化的错误
- 关于类的序列化
- 关于java的序列化
- 关于java的序列化
- 关于序列化的测试
- 关于java的序列化
- 关于java的序列化
- 关于类的序列化
- 关于序列化的理解
- 关于JAVA的对象序列化----------为什么要序列化
- 关于 对象的 序列化问题
- 关于类的序列化[Serializable]
- 关于java的对象序列化
- 关于Java对象序列化的应用~~~
- 一个关于HashSet序列化的问题
- C++ Primer Chapter 10 关联容器之容器的综合应用:文本查询程序
- JavaScript学习笔记
- URLConnection和HTTPClient的比较
- 【屏幕PrtSc键的使用,截取对话框和全屏截取】
- vs2010添加resource文件,无法在项目中加载
- 关于序列化的笔记
- 第2次实验任务
- spring注解@component,@service,@controller,@repository
- MFC学习笔记
- Java虚拟机深入研究
- YII url美化管理
- 设计模式之模板方法
- PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
- Android动态修改图片颜色的实现方式分析