РАЗРАБОТКА ПРОГРАММЫ ДЛЯ СЖАТИЯ ДАННЫХ МЕТОДОМ 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).
![Внешний вид окна программы](images/article7_pic1.jpg)
Рисунок 1. Внешний вид окна программы
Рабочая область программы состоит из трёх частей: сжатие данных (слева), разжатие данных (справа) и полоса текущего состояния (внизу).Для сжатия необходимо нажать кнопку «Добавить файлы» в соответствующей области и выбрать файлы в диалоговом окне. Выбранные файлы отобразятся в небольшом окошке. После нажатия кнопки «Сжать» программа начнёт свою работу, процесс которой будет отображаться в полосе загрузки (см. рис. 2).
![Процесс сжатия файлов](images/article7_pic2.jpg)
Рисунок 2. Процесс сжатия файлов
Для осуществления обратного процесса необходимо нажать кнопку «Выбрать» в области «Разжатие данных», после чего выбрать запакованный файл. Программа выдаст список файлов, содержащийся в данном архиве, и покажет их размер в байтах. Завершить распаковку можно, нажав на кнопку «Разжать» и выбрав папку, в которую будут скопированы файлы (см. рис. 3).
![Процесс разжатия файлов](images/article7_pic3.jpg)
Рисунок 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 документов. Также он свободно распространяется, давая разработчикам возможность создавать собственные реализации алгоритма.
Библиографический список
- Sedgewick R., Wayne K. Algorithms.London: Pearson, 2011. 992 с.
- PuI.Data compression.London:UniversityofLondon, 2004. 256 с.
- Deutsch P. Deflate Compressed Data Format Specification version 1.3 // RFC 1951. 1996.
- Малиевский Я.Г., Баженов Р.И. Разработка компьютерной программы сжатия файлов на основе кода Хаффмана // Актуальные направления научных исследований XXI века: теория и практика. 2015. Т. 3. № 7-4 (18-4). С. 434-437.
- Ласточкин Г.Г., Самойлова Т.А. Повышение производительности веб-сервисов методом сжатия // Системы компьютерной математики и их приложения. 2015. №16. С. 83-85.
- Как работает сжатие GZIP // Habrahabr URL: https://habrahabr.ru/post/221849/ (дата обращения: 15.04.2016).
- Описание формата сжатия данных Deflate // Всё о сжатии данных, изображений и видео URL: http://compression.ru/download/articles/lz/mihalchik_deflate_decoding.html (дата обращения: 15.04.2016).
- Алгоритм Хаффмана // Университет ИТМО 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).