using System;
using System.IO;
using System.IO.Compression;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var xmlContent = File.ReadAllText("CompressExample.txt");
Console.WriteLine($"Plain XML Text Size {xmlContent.Length}");
var compressedText = xmlContent.Zip();
Console.WriteLine($"Plain XML Text Size {compressedText.Length}");
Console.WriteLine($"Uncompressed == Plain {compressedText.Unzip() == xmlContent}");
Console.ReadKey();
}
}
public static class StringExtensions
{
public static string Zip(this string str)
{
var bytes = Encoding.UTF8.GetBytes(str);
var compressedBytes = ComporessionUtils.Zip(bytes);
var base64 = Convert.ToBase64String(compressedBytes);
return base64;
}
public static string Unzip(this string compressedBase64String)
{
var compressedBytes = Convert.FromBase64String(compressedBase64String);
var uncompressedBytes = ComporessionUtils.Unzip(compressedBytes);
var result = Encoding.UTF8.GetString(uncompressedBytes);
return result;
}
}
public class ComporessionUtils
{
public static void CopyTo(Stream src, Stream dest)
{
var bytes = new byte[4096];
int cnt;
while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
{
dest.Write(bytes, 0, cnt);
}
}
public static byte[] Zip(byte[] bytes)
{
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(mso, CompressionMode.Compress))
{
CopyTo(msi, gs);
}
return mso.ToArray();
}
}
public static byte[] Unzip(byte[] bytes)
{
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gs = new GZipStream(msi, CompressionMode.Decompress))
{
CopyTo(gs, mso);
}
return mso.ToArray();
}
}
}
}