|
在进行文件存储或者数据传输时,为了节省空间流量,需要对数据或文件进行压缩。在这里我们讲述通过C#实现数据压缩。
GZipStream压缩
微软提供用于压缩和解压缩流的方法。
此类表示 GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法。 这种格式包括一个检测数据损坏的循环冗余校验值。 GZip 数据格式使用的算法与 DeflateStream 类的算法相同,但它可以扩展以使用其他压缩格式。 这种格式可以通过不涉及专利使用权的方式轻松实现。
可以使用许多常见的压缩工具对写入到扩展名为 .gz 的文件的压缩 GZipStream 对象进行解压缩;但是,此类原本并不提供用于向 .zip 存档中添加文件或从 .zip 存档中提取文件的功能。
DeflateStream 和 GZipStream 中的压缩功能作为流公开。 由于数据是以逐字节的方式读取的,因此无法通过进行多次传递来确定压缩整个文件或大型数据块的最佳方法。 对于未压缩的数据源,最好使用 DeflateStream 和 GZipStream 类。 如果源数据已压缩,则使用这些类时实际上可能会增加流的大小。
代码如下:
- /// <summary>
- /// 压缩字节数组
- /// </summary>
- /// <param name="str"></param>
- public static byte[] Compress(byte[] inputBytes)
- {
- using (MemoryStream outStream = new MemoryStream())
- {
- using (GZipStream zipStream = new GZipStream(outStream, CompressionMode.Compress, true))
- {
- zipStream.Write(inputBytes, 0, inputBytes.Length);
- zipStream.Close(); //很重要,必须关闭,否则无法正确解压
- return outStream.ToArray();
- }
- }
- }
- /// <summary>
- /// 解压缩字节数组
- /// </summary>
- /// <param name="str"></param>
- public static byte[] Decompress(byte[] inputBytes)
- {
- using (MemoryStream inputStream = new MemoryStream(inputBytes))
- {
- using (MemoryStream outStream = new MemoryStream())
- {
- using (GZipStream zipStream = new GZipStream(inputStream, CompressionMode.Decompress))
- {
- zipStream.CopyTo(outStream);
- zipStream.Close();
- return outStream.ToArray();
- }
- }
- }
- }
复制代码
|
上一篇:nginx access_log 日志完全关闭下一篇:美国洛杉矶_16核_96G内存_250M_550元
|