Сжатие строк с использованием 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) ? "Массивы равны" : "Ошибка");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д