сжатие (программное обеспечение)
Эта статья нуждается в дополнительных цитатах для проверки . ( июнь 2012 г. ) |
Оригинальный автор(ы) | Спенсер Томас |
---|---|
Первоначальный выпуск | февраль 1985 г |
Операционная система | Unix , Unix-подобные , IBM i |
Тип | Команда |
Расширение имени файла |
.С |
---|---|
Тип интернет-СМИ |
приложение/x-сжатие |
Разработано | Спенсер Томас |
Тип формата | сжатие данных |
compress — это оболочки Unix, программа сжатия основанная на алгоритме сжатия LZW . [ 1 ] По сравнению с самой быстрой настройкой gzip , компрессия немного медленнее при сжатии, немного быстрее при распаковке и имеет значительно меньшую степень сжатия . [ 2 ] используется 1,8 МБ памяти Для сжатия данных Hutter Prize , что немного больше, чем самая медленная настройка gzip. [ 3 ]
Утилита распаковки восстановит файлы в исходное состояние после того, как они были сжаты с помощью утилиты сжатия . Если файлы не указаны, стандартный ввод будет несжат в стандартный вывод.
В предстоящей редакции спецификации POSIX и Single Unix планируется, что DEFLATE, в этих утилитах будет поддерживаться алгоритм используемый в формате gzip . [ 4 ]
Описание
[ редактировать ]Файлам, сжатым с помощью сжатия, обычно присваивается расширение «.Z» (по образцу более ранней программы -упаковщика , которая использовала расширение «.z»). Большинство tar -программ будут передавать свои данные через сжатие , если им задана опция командной строки " -Z
". ( Программа tar сама по себе не сжимает; она просто хранит несколько файлов в одном ленточном архиве.)
Файлы можно вернуть в исходное состояние с помощью uncompress . Обычное действие распаковки заключается не только в создании несжатой копии файла, но также в восстановлении отметки времени и других атрибутов сжатого файла.
Для файлов, созданных методом сжатия в других системах, распаковка поддерживает сжатие от 9 до 16 бит.
История
[ редактировать ]Алгоритм LZW, используемый в Компресс был запатентован Исследовательским центром Сперри в 1983 году. Терри Уэлч опубликовал статью IEEE об этом алгоритме в 1984 году: [ 5 ] но не заметил, что подал заявку на патент на алгоритм. Спенсер Томас из Университета Юты взял эту статью и реализовал compress в 1984 году, не осознавая, что на алгоритм LZW подан патент. Формат изображений GIF также включал в себя сжатие LZW, и позже Unisys потребовала гонораров за реализацию GIF. Джозеф М. Орост возглавил группу и работал с Томасом и др. для создания «окончательной» (4.0) версии сжал и опубликовал его как бесплатное программное обеспечение для группы USENET net.sources в 1985 году. Патент США 4 558 302 был выдан в 1985 году, и вот почему compress нельзя было использовать без выплаты роялти компании Sperry Research, которая в конечном итоге была объединена с Unisys.
Компресс потерял популярность у определенных групп пользователей, поскольку использует алгоритм LZW, на который распространяется патент Unisys – из-за этого gzip и bzip2 популярность в операционных системах на базе Linux возросла из-за их альтернативных алгоритмов. наряду с лучшим сжатием файлов. Compress , однако, сохранил свое присутствие в Unix и BSD , а также в системах сжать и Команды распаковки также были перенесены в операционную систему IBM i . [ 6 ]
Срок действия патента США на LZW истек в 2003 году, поэтому теперь он находится в свободном доступе в Соединенных Штатах. Срок действия всех патентов на LZW во всем мире также истек (см. «Формат графического обмена № Unisys и защита патентов LZW» ).
В предстоящей версии спецификации POSIX и Single Unix планируется, что в этих утилитах будет поддерживаться алгоритм DEFLATE, используемый в формате gzip .
Специальный формат вывода
[ редактировать ]Выходной двоичный файл состоит из битовых групп. Каждая битовая группа состоит из кодов с фиксированным количеством бит (9-16). Каждая группа (кроме последней) должна быть выровнена по количеству бит, умноженному на 8, и дополнена нулями справа. Последняя группа должна быть выровнена по 8 и дополнена нулями. Более подробную информацию вы можете найти в выпуске ncompress .
Пример:
- Вы хотите вывести десять 9-битных кодов, пять 10-битных кодов и тринадцать 11-битных кодов. Теперь у вас есть три группы битов, которые вы хотите вывести: 90 бит, 50 бит и 143 бита.
- Тогда первая группа должна состоять из 90 бит данных + 54 нулевых бита заполнения, чтобы быть выровненной по 72 битам (9 бит × 8).
- Вторая группа должна тогда состоять из 50 бит данных + 30 нулевых битов заполнения, чтобы быть выровненной по 80 битам (10 бит × 8).
- Третья группа должна тогда состоять из 143 бит данных + 1 нулевой бит заполнения, чтобы быть выровнена по 8 битам (только 1 байт, поскольку это последняя группа в выходных данных).
На самом деле это ошибка. LZW не требует какого-либо выравнивания. Эта ошибка является частью оригинального UNIX-компрессора, ncompress, gzip и даже порта Windows. Он существует более 35 лет. Все файлы application/x-compress были созданы с использованием этой ошибки. Поэтому мы должны включить его в выходную спецификацию.
Некоторые реализации сжатия записывают случайные биты из неинициализированного буфера как биты выравнивания. Нет никакой гарантии, что биты выравнивания будут нулями. Таким образом, с точки зрения 100% совместимости декомпрессор должен просто игнорировать значения битов выравнивания.
Стандартизация и доступность
[ редактировать ]compress был стандартизирован в спецификации X/Open CAE в 1994 году. [ 7 ] и далее в базовых спецификациях открытой группы, выпуск 6 и 7. [ 8 ] Стандартная база Linux не требует сжатия. [ 9 ]
compress часто не устанавливается по умолчанию в дистрибутивах Linux, но его можно установить из дополнительного пакета. [ 10 ] compress доступен для FreeBSD, OpenBSD, MINIX, Solaris и AIX.
сжатие разрешено для протокола «точка-точка» в RFC 1977 и для HTTP/1.1 в RFC 9110 , хотя он редко используется в современных развертываниях, поскольку доступен лучший вариант deflate/gzip.
Утилита Gunzip способна распаковывать файлы .Z. [ 11 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Фрайзингер, Майк. «ncompress: проект, являющийся общественным достоянием» . Проверено 30 июля 2014 г.
Compress — это быстрый и простой компрессор файлов LZW. Compress не имеет самой высокой степени сжатия, но это одна из самых быстрых программ для сжатия данных. Сжатие является фактическим стандартом сжатия файлов в сообществе UNIX.
- ^ Гомманс, Люк. «сжатие. В чем разница между gzip и compress?» . Обмен стеками Unix и Linux .
- ^ «Бенчмарк сжатия большого текста» . mattmahoney.net .
сжать 4.3d....
- ^ «0001041: Поощряйте реализации включать улучшенные утилиты контрольной суммы целостности, сжатия и распаковки, если это возможно» . Система отслеживания ошибок Austin Group . Проверено 23 ноября 2017 г.
- ^ Уэлч, Терри А. (1984). «Техника высокопроизводительного сжатия данных» (PDF) . IEEE-компьютер . 17 (6): 8–19. дои : 10.1109/MC.1984.1659158 . S2CID 2055321 .
- ^ ИБМ . «IBM System i Версия 7.2 Программирование Qshell» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
- ^ Команды и утилиты спецификации X/Open CAE, выпуск 4, версия 2 (pdf), 1994, opengroup.org
- ^ Единая спецификация UNIX , версия 3 от Open Group. – Справочник по оболочке и утилитам,
- ^ Глава 17. Команды и утилиты в стандартной базовой базовой спецификации Linux 5.0.0, linuxfoundation.org
- ^ ncompress , pkgs.org
- ^ «GNU Gzip» . Операционная система GNU и движение за свободное программное обеспечение . 05 февраля 2023 г. Проверено 3 апреля 2024 г.
Gunzip в настоящее время может распаковывать файлы, созданные с помощью gzip, zip, сжатия или упаковки. Определение входного формата происходит автоматически.
Внешние ссылки
[ редактировать ]- Единая спецификация UNIX , версия 4 от The Open Group : сжатие данных — Справочник по командной строке и утилитам,
- Unix версии 8. программиста Руководство –
- FreeBSD по основным командам Руководство –
- OpenBSD по общим командам Руководство –
- Solaris 11.4 по пользовательским командам Справочное руководство –
- ncompress — общедоступная реализация сжатия/распаковки для систем POSIX.
- compress — оригинальный Unix-сжатие (в сжатом архиве)
- compress — оригинальный исполняемый файл сжатия Unix (gzip)
- Исходный код для сжатия v4.0 (архивы в формате gzip)
- ZIP-файл, содержащий порт Windows утилиты сжатия.
- исходный код текущей версии fcompress.c из compress
- Выравнивание битовых групп . Объяснение выравнивания битовых групп.
- lzws — новая библиотека и интерфейс командной строки, реализованные без устаревшего кода.
- Ruby-lzws — привязки Ruby с поддержкой потоковой передачи.
- compress.com — официальный сайт по сжатию файлов.