compress - это программа сжатия оболочки Unix, основанная на алгоритме сжатия LZW . [1] По сравнению с более современными утилитами сжатия, такими как gzip и bzip2 , compress работает быстрее и с меньшим использованием памяти за счет значительно более низкой степени сжатия .
Автор (ы) оригинала | Спенсер Томас |
---|---|
Первый выпуск | Февраль 1985 г . |
Операционная система | Unix , Unix-подобный , IBM i |
Тип | Командование |
Расширение имени файла | .Z |
---|---|
Тип интернет-СМИ | приложение / x-compress |
Разработано | Спенсер Томас |
Тип формата | Сжатие данных |
Распаковывать утилита восстановит файлы в исходное состояние после того, как они были сжаты с использованием компрессионного утилиты. Если файлы не указаны, стандартный ввод будет распакован в стандартный вывод.
В предстоящей версии POSIX и Single Unix Specification планируется, что в этих утилитах будет поддерживаться алгоритм DEFLATE , используемый в формате gzip . [2]
Описание программы
Файлы, сжатые с помощью сжатия , обычно имеют расширение ".Z" (созданное по образцу более ранней программы пакета, в которой использовалось расширение ".z"). Большинство смол программы будет труба своих данных через компресс , когда данный параметр командной строки « -Z
». (Сама по себе программа tar не сжимает; она просто хранит несколько файлов в одном ленточном архиве.)
Файлы можно вернуть в исходное состояние с помощью функции uncompress . Обычное действие распаковки - это не просто создание несжатой копии файла, но также восстановление метки времени и других атрибутов сжатого файла.
Для файлов, созданных с помощью сжатия в других системах, uncompress поддерживает сжатие от 9 до 16 бит.
История
Алгоритм LZW, используемый в Компресс был запатентован Исследовательским центром Сперри в 1983 году. Терри Велч опубликовал статью об алгоритме в IEEE в 1984 году [3], но не упомянул, что он подал заявку на патент на алгоритм. Спенсер Томас из Университета Юты взял эту статью и реализовал сжатие в 1984 году, не осознавая, что патент на алгоритм LZW находится на рассмотрении. GIF формат изображения также включены сжатие LZW таким образом, и Unisys позже утверждал , лицензионные платежи на реализациях GIF. Джозеф М. Орост возглавлял команду и работал с Томасом и др. для создания «финальной» (4.0) версии compress и опубликовал его как бесплатное программное обеспечение для группы USENET net.sources в 1985 году. Патент США 4558302 был выдан в 1985 году, и именно поэтому Компресс нельзя было использовать без выплаты лицензионных отчислений компании Sperry Research, которая в конечном итоге была объединена с Unisys.
Compress не пользуется популярностью в определенных группах пользователей, потому что он использует алгоритм LZW, на который распространяется патент Unisys - из-за этого популярность gzip и bzip2 в операционных системах на базе Linux возросла благодаря их альтернативным алгоритмам наряду с лучшим сжатием файлов. Компресс , однако, сохранил присутствие в системах Unix и BSD , а сжать и Команды uncompress также были перенесены в операционную систему IBM i . [4]
Патент на LZW в США истек в 2003 году, поэтому теперь он находится в общественном достоянии в Соединенных Штатах. Срок действия всех патентов на LZW во всем мире также истек (см. Раздел «Формат обмена графическими данными # Unisys» и «Защита патентов LZW» ).
В предстоящей версии POSIX и Single Unix Specification планируется, что в этих утилитах будет поддерживаться алгоритм DEFLATE , используемый в формате gzip .
Специальный выходной формат
Выходной двоичный файл состоит из битовых групп. Каждая группа битов состоит из кодов с фиксированным количеством битов (9-16). Каждая группа (кроме последней) должна быть выровнена по количеству бит, умноженному на 8, и дополнена нулями справа. Последняя группа должна быть выровнена по 8 и дополнена нулями. Дополнительную информацию можно найти в выпуске ncompress .
Пример:
- Вы хотите вывести 10 9-битных кодов, 5 10-битных кодов и 13 11-битных кодов. Теперь у вас есть 3 группы битов, которые вы хотите вывести: 100 бит, 50 бит и 143 бита.
- Тогда первая группа должна состоять из 100 бит данных + 44 нулевых бита заполнения, чтобы выровняться по 72 битам (9 бит * 8).
- Вторая группа должна состоять из 50 бит данных + 30 нулевых битов заполнения, чтобы быть выровненным по 80 битам (10 бит * 8).
- Третья группа должна состоять из 143 бита данных + 1 нулевой бит заполнения, чтобы быть выровненным по 8 битам (только 1 байт, поскольку это последняя группа на выходе).
На самом деле это ошибка. LZW не требует выравнивания. Эта ошибка является частью оригинального UNIX compress, ncompress, gzip и даже порт Windows. Он существует более 35 лет. Все файлы application / x-compress были созданы с использованием этой ошибки. Поэтому мы должны включить его в выходную спецификацию.
Некоторые реализации сжатия записывают случайные биты из неинициализированного буфера как биты выравнивания. Нет гарантии, что биты выравнивания будут нулевыми. Таким образом, с точки зрения 100% совместимости декомпрессор должен просто игнорировать значения битов выравнивания.
Смотрите также
- Сжатие данных
- Сжатие изображения
- Список команд Unix
- gzip
Рекомендации
- ^ Frysinger, Майк. «ncompress: проект общественного достояния» . Проверено 30 июля 2014 .
Compress - это быстрый и простой компрессор файлов LZW. Compress не имеет самой высокой степени сжатия, но это одна из самых быстрых программ для сжатия данных. Сжатие - это де-факто стандарт в сообществе UNIX для сжатия файлов.
- ^ «0001041: Поощряйте реализации, чтобы они включали, по возможности, улучшенную контрольную сумму целостности, утилиты сжатия и распаковки» . Система отслеживания ошибок Austin Group . Проверено 23 ноября 2017 .
- ^ Уэлч, Терри А. (1984). «Методика высокопроизводительного сжатия данных» (PDF) . Компьютер IEEE . 17 (6): 8–19. DOI : 10,1109 / MC.1984.1659158 .
- ^ IBM . «Qshell для программирования IBM System i версии 7.2» (PDF) . Проверено 5 сентября 2020 .
Внешние ссылки
- : сжатие данных - Справочник по командам и служебным программам, Спецификация Single UNIX , Выпуск 7 от The Open Group
- ncompress - общедоступная реализация сжатия / распаковки для систем POSIX
- compress - исходный сжатие Unix (в сжатом архиве)
- compress - исходный исполняемый файл сжатия Unix (gzip'd)
- Исходный код для compress v4.0 (gzip'd sharchives)
- ZIP-файл, содержащий порт Windows утилиты сжатия.
- исходный код к текущей версии fcompress.c от compress
- Выравнивание битовых групп - Объяснение выравнивания битовых групп.
- lzws - Новая библиотека и CLI, реализованные без устаревшего кода.
- ruby-lzws - привязки Ruby с поддержкой потоковой передачи.