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