using System.IO; using System.IO.Compression; using System.Runtime.Serialization.Formatters.Binary; namespace DeviceRepair.Utils { /// /// 数据 GZip压缩 /// public static class CompressionHelper { #region 对象转byte[] /// /// 转数据集并压缩 /// /// /// public static byte[] ToArrayAndCompress(this object obj) { if (obj == null) return null; byte[] bytes; BinaryFormatter formatter = new BinaryFormatter(); using (MemoryStream memoryStream = new MemoryStream()) { formatter.Serialize(memoryStream, obj); bytes = memoryStream.ToArray(); } return Compress(bytes); } /// /// 解压缩并转化到对象 /// /// /// /// public static T DecompressAndSerializeObject(this byte[] bytes) where T : class { byte[] debyte = Decompress(bytes); BinaryFormatter formatter = new BinaryFormatter(); using (MemoryStream stream = new MemoryStream(debyte)) { object obj = formatter.Deserialize(stream); return (T)obj; } } #endregion /// /// 压缩 /// /// /// public static byte[] Compress(this byte[] data) { using (var compressedStream = new MemoryStream()) { using (var zipStream = new GZipStream(compressedStream, CompressionMode.Compress)) { zipStream.Write(data, 0, data.Length); zipStream.Close(); return compressedStream.ToArray(); } } } /// /// 解压 /// /// /// public static byte[] Decompress(this byte[] data) { using (var compressedStream = new MemoryStream(data)) { using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress)) { using (var resultStream = new MemoryStream()) { zipStream.CopyTo(resultStream); return resultStream.ToArray(); } } } } } }