using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; using System.Text; using System.Threading.Tasks; namespace PCRobot.Pack { public class PackTool { public static string CompressString(string str) { var compressBeforeByte = Encoding.GetEncoding("UTF-8").GetBytes(str); var compressAfterByte = Compress(compressBeforeByte); string compressString = Convert.ToBase64String(compressAfterByte); return compressString; } public static string DecompressString(string str) { if (str == "$") return str; var compressBeforeByte = Convert.FromBase64String(str); var compressAfterByte = Decompress(compressBeforeByte); string compressString = Encoding.GetEncoding("UTF-8").GetString(compressAfterByte); return compressString; } /// /// Compress /// /// /// private static byte[] Compress(byte[] data) { try { var ms = new MemoryStream(); var zip = new GZipStream(ms, CompressionMode.Compress, true); zip.Write(data, 0, data.Length); zip.Close(); var buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); ms.Close(); return buffer; } catch (Exception e) { throw new Exception(e.Message); } } /// /// Decompress /// /// /// private static byte[] Decompress(byte[] data) { try { var ms = new MemoryStream(data); var zip = new GZipStream(ms, CompressionMode.Decompress, true); var msreader = new MemoryStream(); var buffer = new byte[0x1000]; while (true) { var reader = zip.Read(buffer, 0, buffer.Length); if (reader <= 0) { break; } msreader.Write(buffer, 0, reader); } zip.Close(); ms.Close(); msreader.Position = 0; buffer = msreader.ToArray(); msreader.Close(); return buffer; } catch (Exception e) { throw new Exception(e.Message); } } } }