Feedback

C# - Strings komprimieren und dekomprimieren

Veröffentlicht von am 1/6/2009
(2 Bewertungen)
Mit dieser statischen Klasse können Strings komprimiert und dekomprimiert werden.

Dies ist eine überarbeitete Version der Klasse von Mads Kristensen: http://www.csharphelp.com/archives4/archive689.html
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);
            }
        }
    }
}

2 Kommentare zum Snippet

Jan Welker schrieb am 1/7/2009:
Hinweis: Die Komprimierung ist erst ab 170 Zeichen sinnvoll.
Georg Riha schrieb am 5/30/2009:
Besteht die Möglichkeit das dieses wer nach VB Net übersetzt?

Diese Zeile macht mir schwer zu schaffen.

using (var gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
 

Logge dich ein, um hier zu kommentieren!