私は間違いなく非常に明白な何かを見逃していますが、2番目のケースで圧縮率がはるかに優れている理由を誰か説明できますか?!
ケース 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%