Created
October 17, 2016 02:54
-
-
Save heiswayi/07624bad20fb230dc450c134c25b6bfb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment