Назад в библиотеку

РАЗРАБОТКА ПРОГРАММЫ ДЛЯ СЖАТИЯ ДАННЫХ МЕТОДОМ GZIP

Авторы: Бондаренко В. В., Козич В. Г., Баженов Р. И.
Источник: Электронный научно-практический журнал «Современные научные исследования и инновации». 2016. №4

Аннотация

Каждый пользователь хранит огромное количество информации на своем компьютере, соответственно было бы разумным сжимать данные для экономии пространства на жестком диске, а также для хранения нескольких файлов в одном архиве для последующей передачи через Интернет. Особенно актуально это для мобильных платформ и для тех, у кого медленный Интернет. В данной статье рассматривается создание приложения, реализующего GZip сжатие при помощи алгоритма Deflate и упаковку файлов в архив.

Ключевые слова: алгоритм Хаффмана, сжатие данных.

С развитием новых технологий обработки и хранения информации вырастает объём данных, хранящихся на запоминающих устройствах. В целях экономии пространства памяти компьютера разрабатываются различные алгоритмы сжатия данных. Ещё с середины XX века активно велись работы по исследованию эффективных методов сжатия данных, например, алгоритм Хаффмана или алгоритм Шеннона-Фано. Несмотря на множество существующих методов сжатия, разработка новых способов продолжается и по сей день. Особенно актуально уменьшение размера файлов в Интернете, где скорость передачи данных играет существенную роль. Deflate – один из таких алгоритмов, являющийся сочетанием алгоритмов Хаффмана и LZ77 и реализующийся в методе сжатия GZip. Данный метод позволяет сжимать данные любого типа, но особую эффективность он имеет в отношении текстовых данных.

Исследованием методов сжатия данных занимались учёные R. Sedgewick и K.Wayne, которое было опубликовано в книге под названием Algorithms [1]. Исследователь из Лондонского университета I. Pu написала об основных, фундаментальных знаниях сжатия данных, которые позволяют получить полное представление о современных алгоритмах сжатия [2]. Полная техническая спецификация об алгоритме сжатия DeflateRFC 1951 была опубликована программистом P. Deutsch [3]. Разработкой программы, реализующей сжатие файлов с помощью кода Хаффмана занимались Я.Г. Малиевский, Р.И. Баженов [4]. Г.Г. Ласточкин, Т.А.Самойлова при помощи применения сжатия GZip смогли добиться значительного повышения производительности веб-сервисов [5]. Основные преимущества и недостатки алгоритмов, применяемых в сжатии GZip, были высказаны в статье на электронном ресурсе Habrahabr [6]. На сайте «Всё о сжатии данных, изображений и видео» выложен материал по описанию работы алгоритма Deflate [7]. Математическая реализация алгоритма Хаффмана предоставлена на электронном ресурсе «Университет ИТМО» [8].

Для создания программы GZipArchiver применялся язык программирования C#. Среда программирования Visual Studio 2013 располагает стандартными средствами для реализации сжатия GZip. Разработанная программа обладает базовым функционалом, достаточного для компрессии и декомпрессии файлов. Стоит отметить, что по умолчанию данный метод не умеет определять начало и конец файла, в результате чего становится невозможным упаковывать и распаковывать несколько файлов. Для решения этой проблемы были внедрены метки, дающие ссылку на конец файла.

При запуске программы откроется следующее окно (см. рис. 1).

Внешний вид окна программы

Рисунок 1. Внешний вид окна программы

Рабочая область программы состоит из трёх частей: сжатие данных (слева), разжатие данных (справа) и полоса текущего состояния (внизу).Для сжатия необходимо нажать кнопку «Добавить файлы» в соответствующей области и выбрать файлы в диалоговом окне. Выбранные файлы отобразятся в небольшом окошке. После нажатия кнопки «Сжать» программа начнёт свою работу, процесс которой будет отображаться в полосе загрузки (см. рис. 2).

Процесс сжатия файлов

Рисунок 2. Процесс сжатия файлов

Для осуществления обратного процесса необходимо нажать кнопку «Выбрать» в области «Разжатие данных», после чего выбрать запакованный файл. Программа выдаст список файлов, содержащийся в данном архиве, и покажет их размер в байтах. Завершить распаковку можно, нажав на кнопку «Разжать» и выбрав папку, в которую будут скопированы файлы (см. рис. 3).

Процесс разжатия файлов

Рисунок 3. Процесс разжатия файлов

Если при добавлении файлов потребуется удалить один или несколько из них, это всегда можно сделать через контекстное меню, нажав правой кнопкой мыши в окошке с файлами.

Как уже было сказано, метод сжатия GZipбольше всего подходит для компрессии файлов с текстовыми данными. Чтобы убедиться в этом рассмотрим данные следующей таблицы (см. таб. 1).


Таблица 1. Сравнение размера файлов до и после сжатия

Типы файлов Размер файла в килобайтах
До сжатия После сжатия
Текст (txt) 578 211
Изображение (jpg) 478 478
Звук (mp3) 6540 6440
Видео (mp4) 106822 99648
HTML документ (html) 159 28,8
Исполняемый файл (exe) 51504 19445

Из таблицы видно, что сжатие изображений, звука и видео не даёт нам особых преимуществ. Причиной тому является то, что эти типы файлов уже находятся в сжатом состоянии, например, сжатие JPEG. Повторное сжатие не приносит никакого выигрыша в уменьшении размера файла. Зато другие типы данных имеют явное преимущество: текстовый и исполняемый файлы более чем в 2,5 раза, html документ в 5,5 раз.

Таким образом, была создана компьютерная программа, позволяющая сжимать и разжимать данные и упаковывать их в компактный архив. Метод сжатия GZip никоим образом не является лучшим, но при этом обеспечивает хороший баланс между скоростью работы и степенью сжатия. Все веб-браузеры на сегодняшний день поддерживают данный алгоритм сжатия, что позволяет использовать его повсеместно в Интернете, тем более что он показывает хорошие результаты при сжатии текста и html документов. Также он свободно распространяется, давая разработчикам возможность создавать собственные реализации алгоритма.


Библиографический список

  1. Sedgewick R., Wayne K. Algorithms.London: Pearson, 2011. 992 с.
  2. PuI.Data compression.London:UniversityofLondon, 2004. 256 с.
  3. Deutsch P. Deflate Compressed Data Format Specification version 1.3 // RFC 1951. 1996.
  4. Малиевский Я.Г., Баженов Р.И. Разработка компьютерной программы сжатия файлов на основе кода Хаффмана // Актуальные направления научных исследований XXI века: теория и практика. 2015. Т. 3. № 7-4 (18-4). С. 434-437.
  5. Ласточкин Г.Г., Самойлова Т.А. Повышение производительности веб-сервисов методом сжатия // Системы компьютерной математики и их приложения. 2015. №16. С. 83-85.
  6. Как работает сжатие GZIP // Habrahabr URL: https://habrahabr.ru/post/221849/ (дата обращения: 15.04.2016).
  7. Описание формата сжатия данных Deflate // Всё о сжатии данных, изображений и видео URL: http://compression.ru/download/articles/lz/mihalchik_deflate_decoding.html (дата обращения: 15.04.2016).
  8. Алгоритм Хаффмана // Университет ИТМО URL: >http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A5%D0%B0%D1%84%D1%84%D0%BC%D0%B0%D0%BD%D0%B0 (дата обращения: 15.04.2016).