Skip to content

Seraph-coder/lab-2-archiver-program

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Лабораторная работа №2: Архиватор на Java

Описание

Программа реализует три алгоритма сжатия данных без потерь:

  • RLE (Кодирование длин серий)
  • LZW (Лемпел-Зив-Велч)
  • Huffman (Хаффмен)

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

Использование

Сборка

mvn package

Запуск

Сжатие с выбором алгоритма

java -cp target/Lab2-1.0-SNAPSHOT.jar org.example.FileArchiver compress <RLE|LZW|HUFFMAN> input.txt output.arc

Автоматический выбор алгоритма

java -cp target/Lab2-1.0-SNAPSHOT.jar org.example.FileArchiver auto auto input.txt output.arc

Восстановление

java -cp target/Lab2-1.0-SNAPSHOT.jar org.example.FileArchiver decompress <RLE|LZW|HUFFMAN> output.arc restored.txt

Тестирование

mvn test

Требования к окружению

  • Java JDK 21 (или совместимая версия)
  • Maven (рекомендуется последняя версия, например 3.9.x)
  • ОС: Windows, macOS, Linux (проект кроссплатформенный)
  • Для запуска тестов и сборки: команда mvn package и mvn test
  • Для запуска программы: команда java -cp target/Lab2-1.0-SNAPSHOT.jar org.example.FileArchiver ...

Установка зависимостей

  1. Установите JDK 21
  2. Установите Maven
  3. Проверьте, что команды java -version и mvn -v работают в терминале

Критерии автоматического выбора

  • Если в файле много длинных повторов — используется RLE.
  • Если много повторяющихся подстрок — используется LZW.
  • Если много уникальных символов — используется Хаффмен.

Примеры тестов

  • Текст с длинными повторяющимися символами (RLE)
  • Текст с повторяющимися словами/фразами (LZW)
  • Случайные или разнообразные символы (Хаффмен)
  • Бинарные файлы

Коэффициенты сжатия и сравнение алгоритмов

Тип данных RLE LZW Хаффмен
Повторяющиеся символы до 90% низкий средний
Повторяющиеся фразы/слова низкий до 70% средний
Случайные/уникальные низкий низкий до 40%
Бинарные файлы зависит зависит зависит

RLE

  • Эффективен для данных с длинными последовательностями одинаковых символов (например, пробелы, нули).
  • Коэффициент сжатия может достигать 80-90%.
  • Недостаток: плохо работает на текстах без повторов, может даже увеличить размер.

LZW

  • Хорошо сжимает тексты с повторяющимися словами, фразами, шаблонами.
  • Коэффициент сжатия обычно 40-70% для текстов, хуже для случайных данных.
  • Преимущество: не требует хранения словаря в архиве.
  • Недостаток: неэффективен для уникальных или случайных данных.

Хаффмен

  • Универсальный алгоритм, хорошо работает на любых данных, особенно если есть часто встречающиеся символы.
  • Коэффициент сжатия обычно 20-40% для текстов, до 33% для случайных байтов.
  • Преимущество: всегда уменьшает размер, если частоты символов различаются.
  • Недостаток: требует хранения дерева в архиве, что уменьшает выигрыш на малых файлах.

Итоговый вывод

  • Для файлов с большими повторяющимися блоками выгоднее использовать RLE.
  • Для текстов с повторяющимися словами и шаблонами — LZW.
  • Для разнообразных и случайных данных — Huffman.
  • Автоматический выбор позволяет достичь оптимального сжатия без ручного анализа.
  • Все алгоритмы реализованы без сторонних библиотек, легко расширяются и тестируются.

Выводы

  • Все алгоритмы корректно сжимают и восстанавливают данные без потерь.
  • Автоматический выбор алгоритма позволяет достичь лучшего сжатия для разных типов файлов.
  • Программа легко расширяется и сопровождается подробными комментариями.
  • Тесты подтверждают корректность работы на различных наборах данных.
  • Для восстановления требуется знать использованный алгоритм (или хранить его в метаданных).

Рекомендации преподавателю

  • Для проверки используйте команду mvn test — все тесты должны проходить.
  • Для ручной проверки используйте команды из раздела "Запуск".
  • Исходный код снабжен подробными комментариями и докстрингами.
  • Программа не использует сторонние библиотеки для сжатия.
  • Для расширения можно добавить новые алгоритмы или улучшить эвристику выбора.

Формат архива

  • В начале каждого архивного файла записан 1 байт, который указывает используемый алгоритм:
    • 0 — RLE
    • 1 — LZW
    • 2 — Хаффмен
    • Это позволяет полностью автоматизировать разархивацию: программа сама определяет нужный метод.

Пример автоматической разархивации

java -cp target/Lab2-1.0-SNAPSHOT.jar org.example.FileArchiver decompress auto output.arc restored.txt

Автор: Марченко Дмитрий

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages