一、持久化
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
二、序列化
简单说,对象序列化是将对象状态转换为可保持或传输的格式的过程。
什么情况下需要序列化 :
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候; 对象要实现序列化,是非常简单的,只需要实现Serializable接口就可以了。
public class Test implements Serializable
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 using System;
2 using System.IO;
3 using System.Runtime.Serialization.Formatters.Binary;
4
5 namespace ConsoleApplication1
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 #region 序列化
12 MyClass my = new MyClass();
13 my.Name = "illday";
14 my.Age = 28;
15
16 System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();
17 //创建一个文件流
18 Stream stream = new FileStream(@"c:\MyClass.bin", FileMode.Create, FileAccess.Write);
19 using (stream)
20 {
21 //这里就是进行序列化了
22 formatter.Serialize(stream, my);
23 }
24 #endregion
25
26 #region 反序列化
27 //不用NEW了反序列化后会给出一个该对像的引用
28 MyClass my;
29 System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();
30 //打开一个文件流
31 Stream stream = new FileStream(@"c:\MyClass.bin", FileMode.Open, FileAccess.Read);
32 using (stream)
33 {
34 //这里就是反进行序列化了
35 my = (MyClass)formatter.Deserialize(stream);
36 }
37
38 Console.WriteLine(my.Name);
39 Console.WriteLine(my.Age);
40 #endregion
41 }
42 }
43
44 [Serializable]
45 public class MyClass
46 {
47 public string Name { get; set; }
48 public int Age { get; set; }
49 }
50 }
三、持久化和序列化
持久化,是一种对象服务,就是把内存中的对象保存到外存中,让以后能够取回。需要实现三个接口:
void Save(object o) 把一个对象保存到外存中
Object Load(object oid) 通过对象标识从外存中取回对象
bool Exists(object oid) 检查外存中是否存在某个对象
序列化,序列化也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象。需要实现2个接口:
void Serialize(Stream stream,object o) 把对象序列化到流中
object Deserialize(Stream stream) 把流反序列化成对象
序列化是为了解决对象的传输问题,传输可以在线程之间、进程之间、内存外存之间、主机之间进行。之所以在提到序列化,是因为我们可以利用序列化来辅助持久化,可以说凡是可以序列化的对象都可以持久化。