using System.IO; using System.IO.Compression; #if NETSTANDARD2_0 using Brotli; #endif namespace ToolGood.Bedrock { /// /// 压缩 /// public static class CompressionUtil { /// /// 默认压缩 /// /// 要压缩的字节数组 /// 快速模式 /// 压缩后的数组 public static byte[] DeflateCompress(byte[] data, bool fastest = false) { if (data == null || data.Length == 0) return data; try { using (MemoryStream stream = new MemoryStream()) { var level = fastest ? CompressionLevel.Fastest : CompressionLevel.Optimal; using (DeflateStream zStream = new DeflateStream(stream, level)) { zStream.Write(data, 0, data.Length); } return stream.ToArray(); } } catch { return data; } } /// /// 解压 /// /// 要解压的字节数组 /// 解压后的数组 public static byte[] DeflateDecompression(byte[] data) { if (data == null || data.Length == 0) return data; try { using (MemoryStream stream = new MemoryStream(data)) { using (DeflateStream zStream = new DeflateStream(stream, CompressionMode.Decompress)) { using (var resultStream = new MemoryStream()) { zStream.CopyTo(resultStream); return resultStream.ToArray(); } } } } catch { return data; } } /// /// Gzip压缩 /// /// 要压缩的字节数组 /// 快速模式 /// 压缩后的数组 public static byte[] GzipCompress(byte[] data, bool fastest = false) { if (data == null || data.Length == 0) return data; try { using (MemoryStream stream = new MemoryStream()) { var level = fastest ? CompressionLevel.Fastest : CompressionLevel.Optimal; using (GZipStream zStream = new GZipStream(stream, level)) { zStream.Write(data, 0, data.Length); } return stream.ToArray(); } } catch { return data; } } /// /// Gzip解压 /// /// 要解压的字节数组 /// 解压后的数组 public static byte[] GzipDecompress(byte[] data) { if (data == null || data.Length == 0) return data; try { using (MemoryStream stream = new MemoryStream(data)) { using (GZipStream zStream = new GZipStream(stream, CompressionMode.Decompress)) { using (var resultStream = new MemoryStream()) { zStream.CopyTo(resultStream); return resultStream.ToArray(); } } } } catch { return data; } } /// /// Br压缩 /// /// 要压缩的字节数组 /// 快速模式 /// 压缩后的数组 public static byte[] BrCompress(byte[] data, bool fastest = false) { if (data == null || data.Length == 0) return data; try { using (MemoryStream stream = new MemoryStream()) { var level = fastest ? CompressionLevel.Fastest : CompressionLevel.Optimal; using (BrotliStream zStream = new BrotliStream(stream, level)) { zStream.Write(data, 0, data.Length); } return stream.ToArray(); } } catch { return data; } } /// /// Br解压 /// /// 要解压的字节数组 /// 解压后的数组 public static byte[] BrDecompress(byte[] data) { if (data == null || data.Length == 0) return data; try { using (MemoryStream stream = new MemoryStream(data)) { using (BrotliStream zStream = new BrotliStream(stream, CompressionMode.Decompress)) { using (var resultStream = new MemoryStream()) { zStream.CopyTo(resultStream); return resultStream.ToArray(); } } } } catch { return data; } } } }