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

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

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

Вот тут приведены примеры по сжатию строк с использованием GZipStream. Я попытался сделать по аналогии расширяющий метод для string. Вот его реализация:
Листинг программы
  1. static class StringExtension
  2. {
  3. public static string GZipCompress(this string s, CompressionMode mode, Encoding encoding)
  4. {
  5. if (mode == CompressionMode.Compress)
  6. {
  7. using (var outputStream = new MemoryStream())
  8. {
  9. using (var compressionStream = new GZipStream(outputStream, mode))
  10. {
  11. using (var inputStream = new MemoryStream(encoding.GetBytes(s)))
  12. {
  13. inputStream.CopyTo(compressionStream);
  14. }
  15. }
  16. return encoding.GetString(outputStream.ToArray());
  17. }
  18. }
  19. else
  20. {
  21. using (var inputStream = new MemoryStream(encoding.GetBytes(s)))
  22. {
  23. using (var compressionStream = new GZipStream(inputStream, mode))
  24. {
  25. using (var outputStream = new MemoryStream())
  26. {
  27. compressionStream.CopyTo(outputStream);
  28. return encoding.GetString(outputStream.ToArray());
  29. }
  30. }
  31. }
  32. }
  33. }
  34. }
Пример использования:
Листинг программы
  1. static void Main()
  2. {
  3. var encoding = new UTF8Encoding();
  4. string sourceText = "“ ... ”";
  5. string compressedText = sourceText.GZipCompress(CompressionMode.Compress, encoding);
  6. string decompressedText = compressedText.GZipCompress(CompressionMode.Decompress, encoding);
  7. }
Но не работает декомпрессия - ошибка с магическим числом, что не так?
Листинг программы
  1. compressionStream.CopyTo(outputStream);
Неправильное магическое число в заголовке GZip. Передача должна идти в поток GZip.

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

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

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


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

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

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы