GZipStream 类提供用于压缩和解压缩流的方法和属性。
此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。这种格式包括一个检测数据损坏的循环冗余校验值。GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。这种格式可以通过不涉及专利使用权的方式轻松实现。Gzip 的格式可从 RFC 1952 GZIP file format specification 4.3(GZIP 文件格式规范 4.3)中获得。此类不能用于压缩大于 4 GB 的文件。
// 压缩数据
static Byte[] Compress(Byte[] data)
{
// 压缩入这个内存流
using (MemoryStream target = new MemoryStream())
{
using (GZipStream gs = new GZipStream(target, CompressionMode.Compress, true))
{
// 把数据写入压缩流
gs.Write(data, 0, data.Length);
}
return target.ToArray();
}
}
//解压数据
static Byte[] DeCompress(Byte[] data)
{
using (MemoryStream source = new MemoryStream())
{
using (GZipStream gs = new GZipStream(new MemoryStream(data), CompressionMode.Decompress, true))
{
//从压缩流中读出所有数据
byte[] bytes = new byte[4096];
int n;
while ((n = gs.Read(bytes, 0, bytes.Length)) != 0)
{
source.Write(bytes, 0, n);
}
}
return source.ToArray();
}
}
static string GetTestString()
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 1000; i++)
builder.Append("我是测试数据");
return builder.ToString();
}
string test = GetTestString();
Byte[] original = Encoding.Default.GetBytes(test);
Console.WriteLine("数据的原始长度是:" + original.LongLength.ToString());
Byte[] compressed = Compress(original);
Console.WriteLine("压缩后的数据长度是:" + compressed.LongLength);
Byte[] back = DeCompress(compressed);
Console.WriteLine("解压后得到数据长度:" + back.LongLength.ToString());
Console.WriteLine("解压前后是否相等: " + test.Equals(Encoding.Default.GetString(back)));
如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。