using System; using System.IO; using System.IO.Compression; using System.Text; namespace CSharpUtil { /// /// 压缩工具类 /// class CompressUtil { /// /// 数据最大长度不宜超过1M /// const int MaxDataLenght = 1024 * 1024; /// /// 利用deflate算法压缩字节数组 /// /// 字节数组(不宜超过1M) /// 压缩模式(压缩/解压) /// 数据不建议超过1M /// public static byte[] Deflate(byte[] data, CompressionMode compressMode = CompressionMode.Compress) { if (data.Length > MaxDataLenght) { throw new OutOfMemoryException("传入的数据过大(不接受超过1M的数据)!"); } else { byte[] buffer = null; using (MemoryStream outms = new MemoryStream()) { using (DeflateStream df = new DeflateStream(outms, compressMode, true)) { df.Write(data, 0, data.Length); } outms.Position = 0; buffer = outms.ToArray(); } return buffer; } } /// /// 解压deflate数据 /// /// 被压缩的内容 /// 数据不建议超过1M /// public static byte[] InFlate(byte[] data) { // todo: 这种写法在system.io.compress模式下是支持的. return Deflate(data, CompressionMode.Decompress); } public static string InFlate(byte[] data, Encoding encoder) { using (MemoryStream inputStream = new MemoryStream(data)) using (DeflateStream gzip = new DeflateStream(inputStream, CompressionMode.Decompress)) using (StreamReader reader = new StreamReader(gzip, GlobalConfig.Encoding)) { return reader.ReadToEnd(); } } } }