quarta-feira, 22 de julho de 2015

StringCompressor




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

namespace Util
{
  public static class StringCompressor
  {
    ///
    /// Compresses the string.
    ///
    /// The text.
    ///
    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);
    }

    ///
    /// Decompresses the string.
    ///
    /// The compressed text.
    ///
    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);
      }
    }
  }
}


#region Methodos
    public String Json(Object obj) {
      var serializer = new JsonSerializer();
      var stringWriter = new StringWriter();
      using (var writer = new JsonTextWriter(stringWriter))
      {
        writer.QuoteName = false;
        serializer.Serialize(writer, obj);
      }
      return StringCompressor.CompressString(stringWriter.ToString());
    }
    #endregion

Thanks http://stackoverflow.com/questions/7343465/compression-decompression-string-with-c-sharp
Postar um comentário