Цель работы: изучение принципов архивации файлов, функций и режимов работы архиваторов, приобретение практических навыков работы по созданию архивных файлов и извлечению файлов из архивов.
Архивация
- Архивация (упаковка)
- — помещение исходных файлов (данных) в архивный файл в сжатом (англ. lossy) или несжатом (англ. lossless) виде.
- Сжатие данных
- — алгоритмическое преобразование данных, которое уменьшает их объём. При этом данные не теряются.
Архивация нужна для:
- хранения данных в сжатом виде (файлы меньше занимают места на диске);
- создания резервных копий используемых файлов. Нужны на случай потери или порчи по каким-либо причинам основной копии (невнимательность пользователя, повреждение жёсткого диска, заражение компьютера вирусом и т.д.);
- подготовки файлов для отправки по электронной почте, или с помощью других интернет-сервисов, или с помощью других каналов коммуникации;
Выбор между сжатием с потерями (lossy) и без потерь (lossless) зависит от типа данных и требований к их качеству.
- сжатие без потерь обязательно там, где важна абсолютная точность и сохранение каждого бита информации. Например, при архивации текстовых документов, исходного кода программ, баз данных, исполняемых файлов (.exe), а также в профессиональной обработке фотографий (форматы RAW, PNG) и аудио (FLAC), где любое искажение недопустимо.
- сжатие с потерями широко применяется для мультимедийного контента, предназначенного для конечного пользователя — фотографии в формате JPEG, музыка в MP3/AAC, видео в MP4/AVI, — где алгоритм намеренно отбрасывает малозаметные для человеческого глаза или уха детали, уменьшая размер файла в десятки раз при приемлемом качестве.
В таблице приведены различные форматы файлов с разбивкой по типу сжатия:
| Категория | С потерями (Lossy) | Без потерь (Lossless) |
|---|---|---|
| Изображения | JPEG, WebP*, HEIC | PNG, BMP, TIFF, GIF, RAW, WebP* |
| Аудио | MP3, AAC, OGG, WMA | FLAC, ALAC, WAV, AIFF |
| Видео | MP4, AVI, MKV, WebM, WMV | FFV1, HuffYUV |
| Архивы | — | ZIP, RAR, 7Z, GZ, TAR |
* WebP поддерживает оба типа сжатия
Пример сжатия изображения:

Принцип архивации/сжатия данных
RLE
Существует много разных алгоритмов сжатия данных без потерь. Примеры таких алгоритмов:
Рассмотрим принцип сжатия данных без потерь на примере кодирования длин серий (Run-Length Encoding, RLE). Это простой алгоритм. Он заменяет серии (последовательности) из двух или более одинаковых символов числом, обозначающим длину серии. После длины идёт сам символ. Алгоритм полезен для сильно избыточных данных, например простых картинок с большим количеством одинаковых пикселей.
Рассмотрим пример. На входе:
AAABBCCCCDEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
На выходе:
3A2B4C1D8E29A
Как вы видите, преобразованный набор символов хранит ту же информацию, но занимает в 48/13≈3.7 раза меньше места! Число 3.7 - степень сжатия данных.
Самостоятельное задание:
Зашифруйте последовательности с помощью RLE (кодирования длин серий) и посчитайте степень сжатия:
- SRRRJJJAAAGOYAEEEAAASAVVVSCALLVVVPPPLASSSAAAAADDD
- GYUURRRJJJJJWWWWWWWWCCCCCCCCCCCCC
- HAAAAAVEEEEEEANNNNNNNIIIIICCCCEEEEEEEEDDDDDDDDDDAYY
LZ77
- LZ77
- — алгоритм, использующий словарь и скользящее окно для поиска комбинаций символов в уже пройденных данных.
Общая схема алгоритма заключается в:
- Входные данные читаются последовательно.
- Слева от текущей позиции -
прочитанная часть символов - Справа от текущей позиции -
непрочитанная часть символов - Cкользящее окно =
прочитанная часть символов+непрочитанная часть символов - Для символов
непрочитанной частиищется наиболее длинное совпадение в прочитанной части. Если совпадение найдено, то- составляется комбинация (смещение, длина, следующий символ).
- смещение указывает на сколько шагов надо сместиться назад,
- длина - количество совпадающих символов.
- Комбинация записывается в словарь
- составляется комбинация (смещение, длина, следующий символ).
- В конце выходными данными является словарь комбинаций.
Пример
Рассмотрим пример. Мы хотим закодировать текст:
Наш первый шаг - выбрать размеры двух буферов.
- Первый буфер
- — это буфер просмотра прочитанной части символов. Размер этого буфера зависит от того, насколько далеко от текущей позиции алгоритм будет искать совпадение в просмотренных данных. Увеличение этого размера позволит найти больше повторящихся комбинаций и увеличить степень сжатия, но это займёт больше времени.
- Второй буфер
- — буфер просмотра непрочитанной части символов. Размер этого буфера зависит от максимальной длины комбинации, которую мы хотим записать исходя из требований к скорости алгорима и техническим характеристикам компьютера.
Размер первого буфера может быть больше или равным размеру второго буфера. Для простоты выберем оба буфера, равными 6 символам.
Начальная позиция:
Запишем в словарь символ c: (0,0,c), первый ноль - текущая позиция, второй ноль пишется, так как нет смещения. Идём дальше:
Запишем в словарь символ a: (0,0,a). Идём дальше:
Запишем в словарь символ b: (0,0,b). Идём дальше:
Запишем в словарь символ r: (0,0,r). Идём дальше:
Символ a уже встречался, поэтому считаем расстояние до него: 3 шага смещения. Следующий символ из непрочитанной части - c. Такого символа не было в комбинации, которую мы нашли. Поэтому длина комбинации - 1. Запишем в словарь: (3,1,c). Так как мы учли следующий за комбинацией символ c, то сместимся на два шага:
Текущий символ a мы уже встречали, причём дважды. Поэтому мы ищем наиболее длинную комбинацию: a, ad, ada, adab и т.д. Но не длиннее буфера непрочитанной области. Так как комбинаций длиннее 1 нет, то записываем в словарь найденную комбинацию с наименьшим смещением: (2,1,d). Идём дальше:
Удача! Первая длинная комбинация, которая позволит сэкономить много места! Символ a встречался 3 раза, однако самая длинная комбинация abra начинается с самого дальнего символа. Запишем в словарь комбинацию (7,4,r) и сместимся сразу на 5 позиций:
Символ r встречается 2 раза, при этом так же, как и в прошлый раз, с дальнего символа начинается более длинная комбинация. Причём комбинация включает символы также в непрочитанной зоне. Мы можем это также учесть. Запишем в словарь комбинацию rarra: (3,5,d).
Собирём вместе все наши записи из словаря:
(0,0,c) (0,0,a) (0,0,b) (0,0,r) (3,1,c) (2,1,d) (7,4,r) (3,5,d)
Была показана упрощённая схема алгоритма. Если мы посчитаем количество памяти, требующееся для хранения наших записей, то оно превысит количество памяти, необходимое для хранения исходной строки.
Алгоритм начнёт работать, если мы значительно увеличим буфер прочитанной зоны и будем шифровать длинный исходный текст.
Самостоятельное задание:
- Расшифруйте полученную в примере закодированную строку, запишите результат, сравните с исходной строкой.
- Придумайте последовательность длиной не меньше 20 символов и зашифруйте её с помощью алгоритма LZ77. В качестве последовательности можете использовать любой текст.
- Зашифруйте с помощью алгоритма LZ77 скороговорку:
Карл у Клары украл кораллы, а Клара у Карла украла кларнет
- Расшифруйте текст, зашифрованный с помощью LZ77:
(0,0,‘т’) (0,0,‘р’) (0,0,‘и’) (0,0,‘д’) (0,0,‘ц’) (0,0,‘а’) (6,1,‘ь’) (0,0,’ ‘) (9,3,’ ‘) (0,0,‘к’) (0,0,‘о’) (5,1,‘а’) (0,0,‘б’) (0,0,‘л’) (0,0,‘я’) (8,1,‘л’) (6,1,‘в’) (13,1,‘р’) (12,1,‘в’) (6,1,‘л’) (6,1,’,’) (12,13,‘д’) (6,1,’ ‘) (39,1,‘а’) (37,1,’ ‘) (10,1,’ ‘) (0,0,‘н’) (0,0,‘е’) (3,1,‘в’) (0,0,‘ы’) (26,10,’’)
Архивы данных
- Архив
- – это специальным образом организованный файл, содержащий в себе один или несколько файлов в сжатом или несжатом виде. Также архив содержит служебную информацию об именах файлов, дате и времени их создания или модификации.
Степень сжатия зависит от:
- используемой программы,
- алгоритма сжатия,
- типа исходных файлов.
Лучше всего сжимаются файлы картинок и текстовые файлы, для которых размер архива может достигать 5 – 40% от общего размера исходных файлов. Меньше сжимаются файлы исполняемых программ и загрузочных модулей — 60 – 90%. Почти не сжимаются уже заархивированные файлы.
Пример сжатия файла с 412.2 Кб до 244 Кб:

В оглавлении архивного файла (архива) для каждого содержащегося в нём файла хранится следующая информация:
- имя файла;
- сведения о каталоге, в котором содержится файл;
- дата и время последней модификации файла;
- размер файла на диске и в архиве;
- код циклического контроля для каждого файла, используемый для проверки целостности архива.
Для архивации используются специальные программы - Архиваторы, осуществляющие упаковку и сжатие исходных файлов.
Архиваторы позволяют:
- создавать архивы с файлами;
- защищать созданные архивы паролем (получить данные из архива можно только введя пароль);
- разделять большой архивный файл на несколько частей (многотомный архив) при необходимости переноса данных на нескольких носителях ограниченного объёма;
- сохранять и восстанавливать структуру подкаталогов. Сжиматься могут как один, так и несколько файлов, которые в сжатом виде помещаются в архив.
Программы для архивации отличаются используемыми методами сжатия, что соответственно влияет на степень сжатия. Например архиватор 7-zip использует алгоритм сжатия данных по словарю LZMA, схожий с рассмотренным выше алгоритмом LZ77.
Для того чтобы воспользоваться информацией, запакованной в архив, необходимо архив раскрыть или распаковать. Это делается либо программой-архиватором, либо парной к ней программой-разархиватором.
- Разархивация (распаковка)
- — процесс восстановления файлов из архива в первоначальном виде. При распаковке файлы извлекаются из архива и помещаются на диск или в оперативную память.
Архиваторы имеют следующие функциональные возможности:
- Уменьшение требуемого объёма памяти для хранения файлов от 20% до 90% первоначального объёма.
- Обновление в архиве только тех файлов, которые изменялись со времени их последнего занесения в архив, т.е. программа-упаковщик сама следит за изменениями, внесенными пользователем в архивируемые файлы, и помещает в архив только новые и измененные файлы.
- Объединение группы файлов с сохранением в архиве имен директорий с именами файлов, что позволяет при разархивации восстанавливать полную структуру директорий и файлов.
- Написания комментариев к архиву и файлам в архиве.
- Создание саморазархивируемых архивов, которые для извлечения файлов не требуют наличия самого архиватора.
- Создание многотомных архивов – последовательности архивных файлов. Многотомные архивы предназначены для архивации больших комплексов файлов на носители (например, флеш-память).
Популярные архиваторы:
| Архиватор | Платформа | Лицензия | Ключевые преимущества | Поддерживаемые форматы |
|---|---|---|---|---|
| 7-Zip | Windows, Linux, macOS | Открытая (LGPL) | Лучшее сжатие (LZMA2), шифрование AES-256, портативная версия | 7z, ZIP, TAR, RAR (распаковка), +20 форматов |
| PeaZip | Windows, Linux, macOS, BSD | Открытая (LGPL/BSD) | Поддержка 200+ форматов, двухфакторная аутентификация, портативная версия | ZIP, 7Z, RAR, TAR, PEA, +190 форматов |
| Keka | macOS, Linux | Проприетарная (бесплатная загрузка) | Нативный интерфейс macOS, перетаскивание, высокая скорость | 7Z, ZIP, TAR, RAR (распаковка), DMG |
| The Unarchiver | macOS | Проприетарная (бесплатная) | Лёгкий, поддержка 30+ редких форматов, интеграция с Finder | RAR, 7Z, ZIP, ISO, CAB (только распаковка) |
| WinRAR | Windows, Linux, Android, macOS | Проприетарная (условно-бесплатная) | Превосходное сжатие RAR/RAR5, функции восстановления архивов | RAR, ZIP, 7Z, ISO, CAB |
| WinZip | Windows, macOS | Проприетарная (коммерческая) | Интеграция с облаками (Dropbox, GDrive), инструменты для PDF, корпоративное шифрование | ZIP, ZIPX, LHA, CAB |
| PowerArchiver | Windows | Проприетарная (условно-бесплатная) | Поддержка 40+ форматов, шифрование FIPS 140-2, планировщик резервных копий | ZIP, 7Z, RAR, ISO, VHD |
| BorgBackup | Linux | Открытая (BSD) | Дедупликация, шифрование, инкрементные снимки, поддержка SSH | Резервные архивы (зашифрованные) |
| restic | Кроссплатформенный | Открытая (BSD) | Зашифрованные дедуплицированные архивы, поддержка облачных бэкендов (S3, SFTP) | Резервные репозитории |
Другие архиваторы вы можете посмотреть в списке архиваторов.
Практика
Задание 1. Сбор информации для последующего архивирования
- На рабочем столе создайте директорию и назовите её
Информатика_архивация. - В папке
Информатика_архивациясоздайте текстовый файлрезультаты архивации.txt - Внутри папки
Информатика_архивациясоздайте директориюАрхивация картинок, и с помощью браузера и любой поисковой системы найдите 10 фотографий городов, природы, людей из Вашей страны и скачайте их в данную директорию. - Нажмите правой клавишей мыши (ПКМ) по директории
Архивация картинок, нажмите левой клавишей мыши (ЛКМ) по пункту Свойства, посмотрите на размер папки в байтах и запишите это значение в файлрезультаты архивации.txtв виде:
размер директории "Архивация картинок" до архивации составляет ... байт
- Внутри
Информатика_архивациясоздайте директориюАрхивация PDF документов, и с помощью браузера найдите 5 любых статей по интересующей вас теме из энциклопедии Wikipedia на Вашем родном языке. Скачайте статьи в директориюАрхивация PDF документовкак документы формата PDF. Для этого на нужной странице нажмите ПКМ и выберите Сохранить страницу как, далее измените тип файла на Сохранить как PDF
- PDF (Portable Document Format)
- — универсальный открытый кроссплатформенный формат файлов, в котором можно хранить и передавать отчёты, статьи, презентации и другие документы. Файлы такого формата можно создать с помощью редактора текстовых документов из файлов .docx, с помощью Latex-редактора, с помощью редактора презентаций и многих других программ.
- Нажмите ПКМ по директории
Архивация PDF документов, нажмите ЛКМ по пункту Свойства, посмотрите на размер папки в байтах и запишите это значение в файлрезультаты архивации.txt:
размер директории "Архивация PDF документов" до архивации составляет ... байт
Внутри папки
Информатика_архивациясоздайте директориюАрхивация HTML-страниц, и с помощью браузера найдите 5 любых статей на интересующую вас тему из энциклопедии Wikipedia на русском языке и скачайте их в данную директорию как HTML-страницы.Нажмите ПКМ по директории
Архивация HTML-страниц, нажмите левой клавишей мыши (ЛКМ) по пункту Свойства, посмотрите на размер папки в байтах и запишите это значение в файлрезультаты архивации.txt:
размер директории "Архивация HTML-страниц" до архивации составляет ... байт
Задание 2. Создание архива
- Зайдите в директорию
Информатика_архивация - Нажмите ПКМ по директории
Архивация картинок, наведите на пункт 7-Zip и нажмите ЛКМ по Добавить к архиву… - Выберите формат архива zip и максимальный уровень сжатия:
Параметры создания архива (а — Формат архива, б — Уровень сжатия):

- Посмотрите на размер полученного архива в байтах и добавьте запись в файл
результаты архивации.txtв виде
размер директории "Архивация картинок" после архивации составляет ... байт
- Посчитайте (вы можете использовать приложение Калькулятор) значение того, какую долю в процентах занимает размер архива от размера директории до архивации. Добавьте запись об этом в файл
результаты архивации.txtв виде
Соотношение размера архива "Архивация картинок.zip" к размеру исходной директории равно ... \%
- Посчитайте степень сжатия архива:
Степень сжатия равна ...
- Повторите пункты 1—6 для Архивация PDF документов
- Повторите пункты 1—6 для Архивация HTML-страниц
- В файл
результаты архивации.txtдобавьте в свободной форме оценку сравнения трёх результатов архивации. - Загрузите файлы
результаты архивации.txt,Архивация картинок.zip,Архивация PDF документов.zipиАрхивация HTML-страниц.zipв папку Архивация в папке Информатика в вашем облачном хранилище.
Задание 3. Извлечение файлов из архива
Создайте на Рабочем столе папку
Извлечение.Выберите архив
Архивация картинок.zipЩёлкните по нему ПКМ, выберите пункт Извлечь всё…
Распакуйте его на Рабочий стол в папку
Извлечение. Для этого щелчком по кнопкеИзвлечьоткройте окно задания параметров извлечения из архива, в котором укажите нужную папку в дереве папок
Нажмите кнопку ОК.
Ознакомьтесь с результатом извлечения.
Повторите пункты 2—6 для архива
Архивация PDF документов.zipПовторите пункты 2—6 для архива
Архивация HTML-страниц.zipУдалите папку
Извлечениес Рабочего стола.
Ключевые слова
Добавьте слова в свой глоссарий
| Архивация | Степень сжатия |
| Упаковка | Распаковка |
| Сжатие данных | Разархивация |
| Алгоритм сжатия | Формат архива |
| Потери данных | Словарь |
| Степень сжатия | Скользящее окно |
| Архив | Смещение |
| Архиватор | Длина комбинации |
| Сжатие с потерями | Прочитанная часть |
| Сжатие без потерь | Непрочитанная часть |
| Кодирование длин серий |
Вопросы для самоконтроля
- В чём принципиальная разница между сжатием с потерями (lossy) и без потерь (lossless)? Приведите по одному примеру типа файлов, для которого уместно использовать каждый из этих методов.
- Из каких трёх элементов состоит запись в словаре алгоритма LZ77? Кратко объясните, что означает каждый из них: смещение, длина, следующий символ.
- Почему текстовые файлы и простые изображения сжимаются хорошо (до 5–40% от исходного размера), а уже заархивированные файлы или видео в MP4 — почти не сжимаются?
Дополнительное (необязательное) задание. Программирование
- Напишите программу кодирования и декодирования данных методами RLE и LZ77.
- Сравните время работы таких алгоритмов на входных данных различной длины.
- Сравните размер закодированных данных и степень сжатия алгоритмов.