De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

compress es un programa de compresión de shell de Unix basado en el algoritmo de compresión LZW . [1] En comparación con las utilidades de compresión más modernas como gzip y bzip2 , compress funciona más rápido y con menos uso de memoria, a costa de una relación de compresión significativamente menor .

La utilidad de descompresión restaurará los archivos a su estado original después de que se hayan comprimido con la utilidad de compresión . Si no se especifican archivos, la entrada estándar se descomprimirá en la salida estándar.

En la próxima revisión de POSIX y Single Unix Specification , está previsto que el algoritmo DEFLATE utilizado en formato gzip sea ​​compatible con esas utilidades. [2]

Descripción del programa [ editar ]

Los archivos comprimidos por comprimir normalmente reciben la extensión ".Z" (modelada según el programa de paquete anterior que usaba la extensión ".z"). La mayoría de los programas tar canalizarán sus datos a través de compress cuando se les dé la opción de línea de comando " -Z". (El programa tar por sí solo no se comprime; solo almacena varios archivos dentro de un archivo de cinta).

Los archivos se pueden devolver a su estado original utilizando descomprimir . La acción habitual de descomprimir no es simplemente crear una copia sin comprimir del archivo, sino también restaurar la marca de tiempo y otros atributos del archivo comprimido.

En el caso de archivos producidos por compresión en otros sistemas, descomprimir admite compresión de 9 a 16 bits.

Historia [ editar ]

El algoritmo LZW usado en compress fue patentado por Sperry Research Center en 1983. Terry Welch publicó un artículo de IEEE sobre el algoritmo en 1984, [3] pero no notó que había solicitado una patente sobre el algoritmo. Spencer Thomas de la Universidad de Utah tomó este artículo e implementó compress en 1984, sin darse cuenta de que había una patente pendiente sobre el algoritmo LZW. El formato de imagen GIF también incorporó la compresión LZW de esta manera, y Unisys luego reclamó regalías sobre las implementaciones de GIF. Joseph M. Orost dirigió el equipo y trabajó con Thomas et al. para crear la versión 'final' (4.0) de compressy lo publicó como software libre para el grupo USENET 'net.sources' en 1985. La patente de EE.UU. 4.558.302 se otorgó en 1985, y esta es la razón por la que compress no se podía usar sin pagar regalías a Sperry Research, que finalmente se fusionó con Unisys.

compress ha caído en desgracia en determinados grupos de usuarios porque hace uso del algoritmo LZW, que estaba cubierto por una patente de Unisys; debido a esto, gzip y bzip2 aumentaron en popularidad en los sistemas operativos basados en Linux debido a sus algoritmos alternativos, junto con una mejor compresión de archivos. compress , sin embargo, ha mantenido una presencia en los sistemas Unix y BSD y los comandos compress y descompress también se han adaptado al sistema operativo IBM i . [4]

La patente estadounidense LZW expiró en 2003, por lo que ahora es de dominio público en los Estados Unidos. Todas las patentes de LZW en todo el mundo también han expirado (consulte el formato de intercambio de gráficos # Unisys y la aplicación de patentes de LZW ).

En la próxima revisión de POSIX y Single Unix Specification , está previsto que el algoritmo DEFLATE utilizado en formato gzip sea ​​compatible con esas utilidades.

Formato de salida especial [ editar ]

El binario de salida consta de grupos de bits. Cada grupo de bits consta de códigos con una cantidad fija de bits (9-16). Cada grupo (excepto el último) debe estar alineado por la cantidad de bits multiplicado por 8 y rellenado a la derecha con ceros. El último grupo debe alinearse con 8 y rellenarse con ceros. Puede encontrar más información en el tema ncompress .

Ejemplo:

Desea generar 10 códigos de 9 bits, 5 códigos de 10 bits y 13 códigos de 11 bits. Ahora tiene 3 grupos de bits que desea generar: 100 bits, 50 bits y 143 bits.
  • El primer grupo debe ser entonces 100 bits de datos + 44 cero bits de relleno para alinearse a 72 bits (9 bits * 8).
  • El segundo grupo debería ser 50 bits de datos + 30 cero bits de relleno para alinearse a 80 bits (10 bits * 8).
  • El tercer grupo debería ser 143 bits de datos + 1 bit cero de relleno para alinearse con 8 bits (solo 1 byte, ya que este es el último grupo en la salida).

En realidad, es un error. LZW no requiere ninguna alineación. Este error es parte del original UNIX compress, ncompress, gzip e incluso el puerto de Windows. Existe más de 35 años. Todos los archivos de la aplicación / x-compress se crearon con este error. Entonces tenemos que incluirlo en la especificación de salida.

Algunas implementaciones de compresión escriben bits aleatorios desde un búfer no inicializado como bits de alineación. No hay garantía de que los bits de alineación sean ceros. Entonces, en términos de compatibilidad al 100%, el descompresor debe simplemente ignorar los valores de los bits de alineación.

Ver también [ editar ]

  • Compresión de datos
  • Compresión de imagen
  • Lista de comandos de Unix
  • gzip

Referencias [ editar ]

  1. ^ Frysinger, Mike. "ncompress: un proyecto de dominio público" . Consultado el 30 de julio de 2014 . Compress es un compresor de archivos LZW rápido y sencillo. Compress no tiene la tasa de compresión más alta, pero es uno de los programas más rápidos para comprimir datos. Compress es el estándar de facto en la comunidad UNIX para comprimir archivos.
  2. ^ "0001041: Fomentar las implementaciones para incluir mejores utilidades de suma de comprobación de integridad, compresión y descompresión si es posible" . Rastreador de errores del grupo Austin . Consultado el 23 de noviembre de 2017 .
  3. ^ Welch, Terry A. (1984). "Una técnica para la compresión de datos de alto rendimiento" (PDF) . Computadora IEEE . 17 (6): 8-19. doi : 10.1109 / MC.1984.1659158 .
  4. ^ IBM . "IBM System i Versión 7.2 Programación Qshell" (PDF) . Consultado el 5 de septiembre de 2020 .

Enlaces externos [ editar ]

  • compress: Comprimir datos - Referencia de comandos y utilidades, La especificación única de UNIX , Número 7 de The Open Group
  • ncompress : implementación de compresión / descompresión de dominio público para sistemas POSIX
  • comprimir - comprimir Unix original (en un archivo comprimido)
  • compress - ejecutable de compresión original de Unix (gzip'd)
  • Código fuente para compress v4.0 (sharchives gzip)
  • Archivo ZIP que contiene un puerto de Windows de la utilidad de compresión
  • código fuente a la versión actual de fcompress.c desde compress
  • Alineación de grupos de bits : explicación de la alineación de grupos de bits.
  • lzws : nueva biblioteca y CLI, implementadas sin código heredado.
  • ruby-lzws : enlaces Ruby con soporte de transmisión.