二进制序列化
二进制序列化一般用在使用文件存储对象的时候,这样的对象可以是应用程序的配置,或是一些重要的用户数据,经过二进制序列化 + 压缩 + 加密,是很难使用其他软件还原数据的。
1、二进制压缩
二进制序列化时,可以采用 Deflate 压缩算法对数据进行压缩,这样可以减小对象的存储空间,或减少数据传输的大小。如下所示:
[System.Serializable]
public class BinarySerializeObject
{
public string Name { get; set; }
public DateTime Date { get; set; }
}
[TestMethod]
public void TestCompressSerializeToFile()
{
var serializer = new BinaryCompressSerializer();
var obj = new BinarySerializeObject { Name = "fireasy", Date = DateTime.Now };
var bytes = serializer.Serialize(obj);
using (var stream = new FileStream("c:\\test.dat", FileMode.Create, FileAccess.Write))
{
stream.Write(bytes, 0, bytes.Length);
}
}
[TestMethod]
public void TestCompressDeserializeFromFile()
{
var serializer = new BinaryCompressSerializer();
using (var stream = new FileStream("c:\\test.dat", FileMode.Open, FileAccess.Read))
{
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
var obj = serializer.Deserialize<BinarySerializeObject>(bytes);
Assert.AreEqual("fireasy", obj.Name);
}
}
2、二进制加密
为了提高数据的安全性,一般需要对数据进行加密。Fireasy 在序列化的同时,可以使用指定的 ICryptoProvider
实例(可参考 密码算法)对数据进行加密。但要注意加密算法的可逆性,否则无法反序列化。如下所示:
[TestMethod]
public void TestCryptSerializeToFile()
{
var encryptor = CryptographyFactory.Create(CryptoAlgorithm.DES);
var serializer = new BinaryCryptoSerializer(encryptor);
var obj = new BinarySerializeObject { Name = "fireasy", Date = DateTime.Now };
serializer.Serialize(obj, "c:\\test.dat");
}
[TestMethod]
public void TestCryptDeserializeFromFile()
{
var encryptor = CryptographyFactory.Create(CryptoAlgorithm.DES);
var serializer = new BinaryCryptoSerializer(encryptor);
var obj = serializer.Deserialize<BinarySerializeObject>("c:\\test.dat");
Assert.AreEqual("fireasy", obj.Name);
}
💡 特别提醒
要序列化的类型必须加上 SerializableAttribute
特性。