二进制序列化和反序列化--BinaryFormatter 类
基础知识:
序列化基本概念:
序列化 (C#)
序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。
序列化的工作原理
下图展示了序列化的整个过程:
将对象序列化为带有数据的流。 该流还可能包含有关对象类型的信息,例如其版本、区域性和程序集名称。 可以将此流中的对象存储在数据库、文件或内存中。
序列化的用途
通过序列化,开发人员可以保存对象的状态,并能在需要时重新创建对象,同时还能存储对象和交换数据。 通过序列化,开发人员可以执行如下操作:
- 使用 Web 服务将对象发送到远程应用程序
- 将对象从一个域传递到另一个域
- 将对象通过防火墙传递为 JSON 或 XML 字符串
- 跨应用程序维护安全或用户特定的信息
警告 二进制序列化可能会十分危险。
文件-路径-FileStream-StreamWriter/StreamReader的创建流程图
类的创建流程和数据流向图,便于理解其工作原理;
序列化代码
//数据存储地址
private static string path = Application.StartupPath + "\\data.bin";
/// <summary>
/// 将数据存储到文件的静态方法
/// </summary>
public static void SaveToFile()
{
FileStream stream = new FileStream(path,FileMode.OpenOrCreate);
BinaryFormatter binary = new BinaryFormatter();
binary.Serialize(stream,Data);
stream.Close();
}
反序列化代码
using System.Runtime.Serialization.Formatters.Binary;
/// <summary>
/// 从文件下载数据的静态方法
/// </summary>
public static void LoadFromFile()
{
FileStream stream = new FileStream(path,FileMode.Open);
BinaryFormatter binary = new BinaryFormatter();
Data = binary.Deserialize(stream) as List<CBase>;
stream.Close();
}