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();
}
}
}
}