Сжатие строк с использованием GZipStream - C#

Узнай цену своей работы

Формулировка задачи:

Вот тут приведены примеры по сжатию строк с использованием GZipStream. Я попытался сделать по аналогии расширяющий метод для string. Вот его реализация:
    static class StringExtension
    {
        public static string GZipCompress(this string s, CompressionMode mode, Encoding encoding)
        {
            if (mode == CompressionMode.Compress)
            {
                using (var outputStream = new MemoryStream())
                {
                    using (var compressionStream = new GZipStream(outputStream, mode))
                    {
                        using (var inputStream = new MemoryStream(encoding.GetBytes(s)))
                        {
                            inputStream.CopyTo(compressionStream);
                        }
                    }
                    return encoding.GetString(outputStream.ToArray());
                }
            }
            else
            {
                using (var inputStream = new MemoryStream(encoding.GetBytes(s)))
                {
                    using (var compressionStream = new GZipStream(inputStream, mode))
                    {
                        using (var outputStream = new MemoryStream())
                        {
                            compressionStream.CopyTo(outputStream);
                            return encoding.GetString(outputStream.ToArray());
                        }
                    }
                }
            }
        }
    }
Пример использования:
        static void Main()
        {
            var encoding = new UTF8Encoding();
 
            string sourceText = "“ ... ”";
            string compressedText = sourceText.GZipCompress(CompressionMode.Compress, encoding);
            string decompressedText = compressedText.GZipCompress(CompressionMode.Decompress, encoding);
        }
Но не работает декомпрессия - ошибка с магическим числом, что не так?
compressionStream.CopyTo(outputStream);
Неправильное магическое число в заголовке GZip. Передача должна идти в поток GZip.

Решение задачи: «Сжатие строк с использованием GZipStream»

textual
Листинг программы
byte[] buf1 = new byte[]{0x1f, 0x8b}; // GZip magic bytes
string s = encoding.GetString(buf1);
byte[] buf2 = encoding.GetBytes(s);
Console.WriteLine(buf1.SequenceEqual(buf2) ? "Массивы равны" : "Ошибка");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы