我肯定遗漏了一些非常明显的东西,但谁能解释为什么在第二种情况下压缩率要好得多?!
案例 1:非常低的压缩率,有时甚至会增长。
using (var memoryStream = new System.IO.MemoryStream())
using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress))
{
new BinaryFormatter().Serialize(gZipStream, obj);
gZipStream.Close();
return memoryStream.ToArray();
}
案例 2:更好的压缩并且我没有得到尺寸增长。
using (MemoryStream msCompressed = new MemoryStream())
using (GZipStream gZipStream = new GZipStream(msCompressed, CompressionMode.Compress))
using (MemoryStream msDecompressed = new MemoryStream())
{
new BinaryFormatter().Serialize(msDecompressed, obj);
byte[] byteArray = msDecompressed.ToArray();
gZipStream.Write(byteArray, 0, byteArray.Length);
gZipStream.Close();
return msCompressed.ToArray();
}
我已经完成了镜像解压缩,在这两种情况下,我都可以将其反序列化为源对象而不会出现任何问题。
以下是一些统计数据:
UncSize: 58062085B, Comp1: 46828139B, 0.81%
UncSize: 58062085B, Comp2: 31326029B, 0.54%
UncSize: 7624735B, Comp1: 7743947B, 1.02%
UncSize: 7624735B, Comp2: 5337522B, 0.70%
UncSize: 1237628B, Comp1: 1265406B, 1.02%
UncSize:1237628B,Comp2:921695B,0.74%