92 lines
2.7 KiB
C#
92 lines
2.7 KiB
C#
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Compress
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Decompress
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|