Csharp/C#教程:BinaryFormatter是否应用任何压缩?分享


BinaryFormatter是否应用任何压缩?

当.NET的BinaryFormatter用于序列化对象图时,是否应用了任何类型的压缩?

我在上下文中询问是否应该担心具有许多重复字符串和整数的对象图。

编辑 – 等一下,如果在.NET中实例化字符串,则无需担心重复的字符串,对吧?

不,它不提供任何压缩,但您可以使用GZipStream类型自己压缩输出。

编辑: Mehrdad在回答如何使用gzip压缩.net对象实例时有一个很好的例子。

编辑2:字符串可以被实习但这并不意味着每个字符串被实习。 我不会对CLR如何或为何决定实习字符串作出任何假设,因为这可以从版本更改(并且已经更改)。

不,它没有,但……

我今天刚刚为我的应用添加了GZipStream支持,所以我可以在这里分享一些代码;

连载:

 using (Stream s = File.Create(PathName)) { RijndaelManaged rm = new RijndaelManaged(); rm.Key = CryptoKey; rm.IV = CryptoIV; using (CryptoStream cs = new CryptoStream(s, rm.CreateEncryptor(), CryptoStreamMode.Write)) { using (GZipStream gs = new GZipStream(cs, CompressionMode.Compress)) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(gs, _instance); } } } 

反序列化:

 using (Stream s = File.OpenRead(PathName)) { RijndaelManaged rm = new RijndaelManaged(); rm.Key = CryptoKey; rm.IV = CryptoIV; using (CryptoStream cs = new CryptoStream(s, rm.CreateDecryptor(), CryptoStreamMode.Read)) { using (GZipStream gs = new GZipStream(cs, CompressionMode.Decompress)) { BinaryFormatter bf = new BinaryFormatter(); _instance = (Storage)bf.Deserialize(gs); } } } 

注意:如果您使用CryptoStream,以这种方式链接(取消)压缩和(解密)加密是很重要的,因为在加密会从数据中产生噪声之前,您将希望丢失熵。

上述就是C#学习教程:BinaryFormatter是否应用任何压缩?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

www.ctvol.com true Article Csharp/C#教程:BinaryFormatter是否应用任何压缩?分享

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/984602.html

(0)
上一篇 2021年12月20日 下午12:58
下一篇 2021年12月20日 下午1:03

精彩推荐