using System.IO; using System.IO.Compression; namespace AllBase { public static class ZipHelper { /// /// GZip压缩 /// /// /// public static byte[] Compress(byte[] rawData) { if (rawData == null || rawData.Length < 1000) return rawData; MemoryStream ms = new MemoryStream(); GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true); compressedzipStream.Write(rawData, 0, rawData.Length); compressedzipStream.Close(); return ms.ToArray(); } /// /// ZIP解压 /// /// /// public static byte[] Decompress(byte[] zippedData) { if (zippedData == null || zippedData.Length == 0) return null; if (zippedData.Length < 100) return zippedData; if (zippedData[2] != 0x8 || zippedData[3] != 0x0 || zippedData[4] != 0x0 || zippedData[5] != 0x0 || zippedData[6] != 0x0 || zippedData[7] != 0x0 || zippedData[0] != 31 || zippedData[1] != 139)//软加速判断头尾是否正确 return zippedData; try { MemoryStream ms = new MemoryStream(zippedData); GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress); MemoryStream outBuffer = new MemoryStream(); byte[] block = new byte[1024]; while (true) { int bytesRead = compressedzipStream.Read(block, 0, block.Length); if (bytesRead < 1) break; outBuffer.Write(block, 0, bytesRead); } compressedzipStream.Close(); return outBuffer.ToArray(); } catch { } return zippedData; } } }