using System.IO.Compression; namespace PARR.Infrastructure.Redis.Helpers { /// /// Архивация/разарзивация данных /// internal static class CompressionHelper { // Не сжимать маленькие значения private const int MinCompressionSize = 1024; // 1Кб /// /// Сжать /// /// /// public static byte[] Compress(byte[] data) { if (data.Length < MinCompressionSize) return data; using var output = new MemoryStream(); using (var gzip = new GZipStream(output, CompressionLevel.Optimal)) { gzip.Write(data, 0, data.Length); } return output.ToArray(); } /// /// Разархивировать если это GZip /// /// /// public static byte[] Decompress(byte[] data) { // Проверяем сигнатуру GZip (0x1F, 0x8B) if (data.Length < 2 || data[0] != 0x1F || data[1] != 0x8B) return data; // Не сжато using var input = new MemoryStream(data); using var gzip = new GZipStream(input, CompressionMode.Decompress); using var output = new MemoryStream(); gzip.CopyTo(output); return output.ToArray(); } } }