Compress and Decompress Strings in c#

By Super Man

How to compress and decompress strings in c#

using System;
using System.IO;
using System.IO.Compression;
using System.Text;

namespace CompressString
{
    internal static class StringCompressor
    {
         /// <summary>
        /// Compresses the string.
        /// </summary>
        /// <param name="text">The text.</param>
        /// <returns></returns>
        public static string CompressString(string text)
        {
             byte[] buffer = Encoding.UTF8.GetBytes(text);
             var memoryStream = new MemoryStream();
            using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
            {
                 gZipStream.Write(buffer, 0, buffer.Length);
            }

            memoryStream.Position = 0;

             var compressedData = new byte[memoryStream.Length];
            memoryStream.Read(compressedData, 0, compressedData.Length);

             var gZipBuffer = new byte[compressedData.Length + 4];
           Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length);
           Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gZipBuffer, 0, 4);
             return Convert.ToBase64String(gZipBuffer);
        }

        /// <summary>
        /// Decompresses the string.
        /// </summary>
        /// <param name="compressedText">The compressed text.</param>
        /// <returns></returns>
        public static string DecompressString(string compressedText)
        {
             byte[] gZipBuffer = Convert.FromBase64String(compressedText);
             using (var memoryStream = new MemoryStream())
            {
                 int dataLength = BitConverter.ToInt32(gZipBuffer, 0);
                 memoryStream.Write(gZipBuffer, 4, gZipBuffer.Length - 4);

                 var buffer = new byte[dataLength];

                 memoryStream.Position = 0;
                 using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
                 {
                     gZipStream.Read(buffer, 0, buffer.Length);
                 }

                 return Encoding.UTF8.GetString(buffer);
            }
        }
    }
}

Now whenever you want to compress and decompress string. you just have to call this functions.

Compress and Decompress Strings in c#  (973 Views)