bzip2


bzip2 es un programa de compresión de archivos de código abierto y gratuito que utiliza el algoritmo de Burrows-Wheeler . Solo comprime archivos individuales y no es un archivador de archivos . Fue desarrollado por Julian Seward y mantenido por Mark Wielaard y Micah Snyder.

Seward hizo el primer lanzamiento público de bzip2, versión 0.15, en julio de 1996. La estabilidad y popularidad del compresor crecieron durante los siguientes años, y Seward lanzó la versión 1.0 a fines de 2000. [ no verificado en el cuerpo ] Después de una pausa de nueve años de actualizaciones para el proyecto desde 2010, el 4 de junio de 2019 Federico Mena aceptó el mantenimiento del proyecto bzip2. [3] Desde junio de 2021, el mantenedor es Micah Snyder. [4]

Bzip2 utiliza varias capas de técnicas de compresión apiladas una encima de la otra, que ocurren en el siguiente orden durante la compresión y en orden inverso durante la descompresión:

Cualquier secuencia de 4 a 255 símbolos duplicados consecutivos se reemplaza por los primeros 4 símbolos y una longitud de repetición entre 0 y 251. Por lo tanto, la secuencia AAAAAAABBBBCCCDse reemplaza con AAAA\3BBBB\0CCCD, donde \3y \0representan valores de bytes 3 y 0 respectivamente. Las series de símbolos siempre se transforman después de 4 símbolos consecutivos, incluso si la longitud de la serie se establece en cero, para mantener la transformación reversible.

El autor de bzip2 ha declarado que el paso RLE fue un error histórico y solo tenía la intención de proteger la implementación original de BWT de casos patológicos. [5]

La transformada de Burrows-Wheeler es el tipo de bloque reversible que se encuentra en el núcleo de bzip2. El bloque es completamente autónomo, con los búferes de entrada y salida restantes del mismo tamaño; en bzip2, el límite operativo para esta etapa es de 900 kB. Para la ordenación de bloques, se crea una matriz (teórica), en la que la fila i contiene la totalidad del búfer, girada para comenzar desde el símbolo i -ésimo. Después de la rotación, las filas de la matriz se clasifican en orden alfabético (numérico). Se almacena un puntero de 24 bits que marca la posición inicial .para cuando el bloque no se transforma. En la práctica, no es necesario construir la matriz completa; más bien, la clasificación se realiza utilizando punteros para cada posición en el búfer. El búfer de salida es la última columna de la matriz; contiene todo el búfer, pero reordenado para que sea probable que contenga grandes series de símbolos idénticos.