el bzip2 es un el algoritmo sin pérdidas abierto libre de la compresión de datos de la fuente de y y programa desarrollado por el Seward juliano . Seward hizo el primer lanzamiento público de bzip2, versión 0. La estabilidad y el renombre del compresor crecieron sobre los varios años próximos, y la versión lanzada 1.0 de Seward de finales de 2000.

Eficacia de la compresión

bzip2 comprime la mayoría de los archivos más con eficacia que un más tradicional Gzip o el CIERRE RELÁMPAGO pero es más lento. De este modo es bastante similar a otros algoritmos de compresión de la reciente-generación. Desemejante de otros formatos tales como RAR o CIERRE RELÁMPAGO (y similar al gzip), bzip2 es solamente un compresor de los datos, no un archiver. El programa sí mismo no tiene ninguna facilidad para los archivos múltiples, encripción o el archivo-partir, en la tradición de UNIX en lugar de otro que confía en utilidades externas separadas tales como alquitrán y GnuPG para estas tareas.

Según lo indicado en la página delantera del Web site bzip2, en la mayoría de los casos bzip2 es sobrepasado por LZMA y algoritmos del PPM en términos de eficacia absoluta de la compresión. Según el autor, bzip2 consigue dentro del diez a quince por ciento de PPM, mientras que estando áspero dos veces tan rápidamente en la compresión y seis veces más rápidamente en la descompresión.

bzip2 utiliza el Burrows-Policía motorizado transforma para convertir secuencias del carácter con frecuencia que se repiten en las cadenas de letras idénticas, y después aplica un Mover-a-delantero transforma y finalmente la codificación de Huffman. En bzip2 los bloques son generalmente todos los mismos tamaños en el plaintext, que se puede seleccionar por una comando-línea discusión entre el kB - de 100 kB 900. Los bloques de la compresión son delimitados por una secuencia de 48 pedacitos (número mágico ) derivada de la representación del decimal codificado en binario del π, 0x314159265359, con la fin-de-corriente delimitada semejantemente por un valor que representa la raíz cuadrada (π ), 0x177245385090.

Original, el bzip del antepasado de bzip2 utilizó la codificación aritmética después del blocksort; esto fue continuada debido a la restricción de la patente que se substituirá por la codificación de Huffman usada actual en bzip2.

bzip2 se sabe para ser extremadamente lento en la compresión, haciendo a gente optar por alternativas tales como Gzip o Rar cuando el tiempo es una edición. Este problema es asimétrico, pues la descompresión está relativamente rápidamente. Motivado por el tiempo CPU grande requerido para la compresión, una versión modificada fue creada en 2003 que el apoyado Multi-threading, dando mejoras significativas de la velocidad en multi-CPU y las computadoras multifilares. En fecha 2007 esta funcionalidad no se ha incorporado en el proyecto principal.

Apilado de la compresión

Bzip2 utiliza varias capas de técnicas de compresión apiladas encima de uno a, que ocurren en la orden siguiente durante la compresión y la orden reversa durante la descompresión: codificación (RLE) de la Funcionar-longitud: cualquier secuencia de 4 a 255 símbolos duplicados consecutivos es substituida por los primeros cuatro símbolos y una longitud de la repetición entre 0 y 251. Así el " de la secuencia; AAAAAAABBBBCCCD" se substituye por el " AAAA \ 3BBBB \ 0CCCD" . Los funcionamientos de símbolos se transforman siempre después de cuatro símbolos consecutivos, incluso si la funcionar-longitud se fija a cero, para mantener la transformación reversible. En el peor caso, puede causar una extensión del pre-BWT de 1.25 y en el mejor caso una reducción a <0.02 del tamaño original. Observar que mientras que la especificación permite teóricamente funcionamientos de la longitud 256 - 259 que se codificarán, esto no es en la práctica alcanzado debido al uso del " limitado; char" datatype para almacenar y para cargar longitudes de RLE. El autor considera este paso un error histórico -- no mejora realmente la compresión mucho, y fue pensado proteger el algoritmo de BWT contra casos patológicos.
  • El Burrows-Policía motorizado transforma (BWT): ésta es la bloquear-clase reversible que está en la base de bzip2. El bloque es enteramente autónomo, con la entrada y los almacenadores intermediarios de salida que siguen siendo iguales tamaño-en bzip2, el límite del funcionamiento para esta etapa son el kB 900. Para la bloquear-clase, se crea la matriz (teórica) de a en la cual la fila i contiene el conjunto del almacenador intermediario, girado al comienzo del símbolo del i^ \ del mathrm {th} . Después de la rotación, las filas de la matriz se clasifican en orden (numérica) alfabética. Los 24 indicadores del pedacito se almacenan que marcan la posición de salida del para cuando el bloque untransformed. En la práctica, no es necesario construir la matriz completa, la clase se realiza algo usar los indicadores para cada posición en el almacenador intermediario. El almacenador intermediario de salida es la columna pasada de la matriz; esto contiene el almacenador intermediario entero, pero lo reordenó de modo que sea probable contener funcionamientos grandes de símbolos idénticos.
  • Movimiento de afrontar (MTF): otra vez, esto transforma no altera el tamaño del bloque procesado. Cada uno de los símbolos funcionando en el documento se pone en un arsenal. Cuando se procesa un símbolo, es substituido por su subíndice (compensar) en el arsenal y ese símbolo está mezclado al frente del arsenal. El efecto es que los símbolos inmediatamente que se repiten son substituidos por los símbolos cero (los funcionamientos largos del cualquier símbolo arbitrario de se convierten en así funcionamientos de los símbolos cero), mientras que otros símbolos remapped según su frequency.
    local mucho " natural" los datos contienen los símbolos idénticos que se repiten dentro de una gama limitada (el texto es un buen ejemplo). Mientras que los MTF transforman asignan valores bajos a los símbolos que reaparecen con frecuencia, éste da lugar a una secuencia de datos que contenga muchos símbolos en la gama baja del número entero, muchas de ellos que son idénticos (diversos símbolos de la entrada que se repiten pueden trazar realmente al mismo símbolo de la salida). Tales datos se pueden codificar muy eficientemente por cualquier método de la compresión de la herencia.
  • codificación (RLE) de la Funcionar-longitud: las cadenas largas de símbolos repetidos en la salida (normalmente ceros para entonces) son substituidas por una combinación del símbolo y una secuencia de dos códigos especiales, RUNA y RUNB, que representan la funcionar-longitud como número binario mayor de un (1). La secuencia 0,0,0,0,0,1 sería representada como 0, RUNB, RUNA, 1; RUNB y RUNA que representan el valor 4 en decimal. El código de la funcionar-longitud es terminado alcanzando otro símbolo normal. Este proceso de RLE es más flexible que el RLE del paso 1, como puede codificar arbitrariamente números enteros largos (en la práctica, esto es limitado generalmente por el tamaño de bloque, de modo que este paso no codifique un funcionamiento de más de 900000 octetos). La funcionar-longitud se codifica de este modo: la asignación de valores de lugar de 1 al primer pedacito, de 2 al segundo, de 4 al tercero, del etc. en la secuencia de RUNA/RUNB, multiplica cada valor de lugar en un punto de RUNB por 2, y agrega todos los valores de lugar resultantes (para los valores de RUNA y de RUNB igualmente) juntos. Así, la secuencia RUNB, RUNA da lugar al valor (1*2 + 2) = 4. Como ejemplo más complicado:
  • : RUNA RUNB RUNA RUNA RUNB (ABAAB)
    &NBSP;     1        2        4        8      16
          1        4        4        8      32 =
  • 49 Codificación de Huffman: este proceso substituye los símbolos de la longitud fija (bytes de 8 bits) por los códigos de longitud variable basados en la frecuencia del uso. Los códigos más con frecuencia usados terminan para arriba más corto (2-3 pedacitos) mientras que los códigos raros se pueden asignar hasta 20 pedacitos. Los códigos se seleccionan cuidadosamente de modo que ninguna secuencia de pedacitos pueda ser confusa para un diverso código de la fin-de-corriente de code.
    The sea particularmente interesante. Si hay diversos octetos del n (símbolos) usados en los datos sin comprimir, después el código de Huffman consistirá en dos códigos de RLE (RUNA y RUNB), códigos del símbolo del n-1 y un código de la fin-de-corriente. Debido a el resultado combinado de las codificaciones de MTF y de RLE en los dos pasos anteriores, nunca hay cualquier necesidad de referirse explícitamente al primer símbolo a la tabla de MTF, así al símbolo del ahorro uno para el marcador de la fin-de-corriente (y explicar porqué solamente los símbolos del n-1 se cifran en el árbol de Huffman). En el caso extremo donde solamente un símbolo se utiliza en los datos sin comprimir, no habrá códigos del símbolo en absoluto en el árbol de Huffman, y el bloque entero consistirá en RUNA y RUNB (que repiten implícito el solo octeto) y un marcador de la fin-de-corriente con el
  • del valor 2. : 0: RUNA
    1: RUNB
    2-257: el octeto valora 0-255
    258: extremo de la corriente, proceso del final. (podría ser tan bajo como el
  • 2). El múltiple Huffman tabula : varias tablas idéntico-clasificadas de Huffman se pueden utilizar con un bloque si el aumento de usarlas es mayor que el coste de incluir la tabla adicional. Por lo menos dos (2) y hasta seis (6) tablas pueden estar presentes, con la tabla más apropiada que es reelegida antes de cada 50 símbolos procesados. Esto tiene la ventaja del tener dinámica muy responsiva de Huffman sin tener que continuamente suministrar las nuevas tablas, como sería requerido en DESINFLAN . la codificación de la Funcionar-longitud en el paso anterior se diseña para tomar el cuidado de los códigos que tienen una probabilidad inversa del uso más arriba que el código más corto de Huffman del código funcionando.
  • Codificación singular de la base 1 : si las tablas múltiples de Huffman son funcionando, la selección de cada tabla (numerada 0.5) es hecha de una lista por un pedacito cero-terminado funcionado con entre un (1) y seis (6) pedacitos en longitud. La selección está en una lista MTF de las tablas. Usar esta característica da lugar a una extensión máxima de alrededor 1.015, pero generalmente menos. Esta extensión es probable ser eclipsada grandemente por la ventaja de seleccionar tablas más apropiadas de Huffman y el común-caso de continuación utilizar la misma tabla de Huffman se representa como de un solo bit. Algo que la codificación singular, ésta es con eficacia una forma extrema de un árbol de Huffman donde cada código tiene mitad de la probabilidad del
  • anterior de code.

    Codificación (Δ) del delta: Las pedacito-longitudes del código de Huffman se requieren reconstruir cada uno de las tablas canónicas usadas de Huffman. Cada pedacito-longitud se almacena como diferencia codificada contra la pedacito-longitud anterior del código. Un cero-pedacito (0) significa que la pedacito-longitud anterior se debe duplicar para el código actual, mientras que un uno-pedacito (1) significa que otro pedacito debe ser leído y la pedacito-longitud incrementada o decremented basado en ese valor. En el caso común que un de un solo bit se utiliza por símbolo por la tabla y caso-ir peor de la longitud una (1) a la longitud veinte (20) - requeriría aproximadamente 37 pedacitos. Como resultado de la codificación anterior de MTF, las longitudes del código comenzarían en 2-3bits de largo (los códigos muy con frecuencia usados) y aumentarían gradualmente, el significado que el formato del delta bastante eficiente-está requiriendo alrededor 300 pedacitos (38 octetos) por la tabla llena de Huffman.
  • Arsenal de pedacito escaso : una BITMAP se utiliza para demostrar qué símbolos se utilizan dentro del bloque y se deben incluir en los árboles de Huffman. Los datos binarios son probables utilizar los 256 símbolos representables por un octeto, mientras que los datos textuales pueden utilizar solamente un pequeño subconjunto de valores disponibles, quizás cubriendo la gama ASCII entre 32 y 126. Almacenar 256 pedacitos cero sería ineficaz si eran sobre todo inusitados. Se utiliza un método escaso del, los 256 símbolos se dividen para arriba en 16 gamas y solamente si los símbolos se utilizan dentro de ese bloque es un arsenal de 16 bits incluido. La presencia de cada uno de estas 16 gamas es indicada por un arsenal de pedacito de 16 bits adicional en el frente. Las aplicaciones totales de la BITMAP entre 32 y 272 pedacitos de almacenaje (4-34 octetos). Para el contraste, el DESINFLA algoritmo de demostraría la ausencia de un símbolo codificando el símbolo como teniendo pedacito-longitud cero; esto es muy ineficaz con la Delta-codificación usada en bzip2 que sea la razón de bzip2 que tiene un arsenal de pedacito separado.

    Formato de archivo

    Una corriente de .bz2 consiste en un jefe de 4 octetos, seguido por bloques cero o comprimida, seguidos inmediatamente por un marcador de la fin-de-corriente que contiene un CRC de 32 bits para la corriente entera del plaintext procesada. Pedacito-se alinean los bloques comprimidos y ningún acolchado ocurre.

    ¡

     .magic: 16 = firma de “BZ”/número mágico .version: 8 = “h” para Bzip2 ('codificación de H'uffman), “0” para Bzip1 (desaprobado) tamaño de .hundred_k_block: 8 = “1”. “9” kB del bloquear-tamaño 100 kB-900 

    .com pressed_magic: 48 = 0x314159265359 (BCD (pi)) .crc: 32 = suma de comprobación para este bloque .randomised: 1 = 0=>normal, 1=>randomised (desaprobado) .origPtr: 24 = comenzando el indicador en BWT para después del untransform .huffman_used_map: 16 = BITMAP, de los radios de acción de 16 octetos, presente/no presente .huffman_used_bitmaps: 0.256 = BITMAP, de los símbolos usados, presente/no presente (múltiplos de 16) .huffman_groups: el número 3 = 2.6 de diverso Huffman tabula funcionando .selectors_used: 15 = número de épocas que el Huffman tabule son

  • intercambiado del
      (de cada 50 octetos) .6 = cero-terminó los funcionamientos del pedacito (0.62) de la tabla de MTF'ed Huffman (*selectors_used)
    .start_huffman_length: 5 = 0.20 longitudes de pedacito el comenzar para el los deltas de Huffman .40 = símbolo 0=>next; longitud 1=>alter
  • {longitud 1=>decrement; longitud 0=>increment} (* (symbols+2)*groups) .∞ = secuencia de datos codificada Huffman hasta el extremo del bloque

    .eos_magic: 48 = 0x177245385090 (raíz cuadrada del BCD (pi)) .crc: 32 = suma de comprobación para la corriente entera .7 = alinean con el octeto entero

    Nota para los ejecutores: Debido a la compresión de primera planta de RLE (véase arriba), la longitud máxima del plaintext que un solo 900  el bloque del kB bzip2 puede contener está alrededor de 46  MB (45,899,235  octetos). Esto puede ocurrir si el plaintext entero consiste enteramente en valores repetidos (el archivo resultante de .bz2 en este caso es 46  octetos de largo).

    Uso

    En el Unix, bzip2 puede ser utilizado combinó con o independiente de alquitrán: archivo del bzip2 a comprimir y bzip2 - d file.bz2 a los uncompress (el bunzip2 del alias para la descompresión se puede también utilizar).

    la línea de comando de bzip2 banderas está sobre todo igual que en el Gzip . Así pues, extraer de un alquitrán-archivo de bzip2-compressed:

    bzip2 - d < archivefile .bz2 | alquitrán - xf - o bunzip2 < archivefile .bz2 | alquitrán - xf -

    Para crear un alquitrán-archivo de bzip2-compressed:

    alquitrán - cf - nombres de fichero del | bzip2 > archivefile .bz2

    El alquitrán del GNU apoya a - la bandera de j, que permite la creación de los archivos tar.bz2 sin una tubería: alquitrán - archivo-lista archivefile .bz2 del cjf

    Descompresión en alquitrán del GNU: alquitrán - archivefile .bz2 del xjf

    Puestas en práctica

    bzip2: Puesta en práctica original juliana de la referencia de s de Seward 'disponible debajo de una licencia del DEB.
    7-Zip : escrito por Igor Pavlov en el C++, la habitación 7-Zip contiene un codificador bzip2/un decodificador que se autorice libremente.
    micro-bzip2: una versión de Robo Landley diseñó para el tamaño de código compilado reducido y disponible bajo LGPL del GNU.bzip2: Puesta en práctica de Java del sistema de la estructura de la hormiga de Apache disponible debajo de la licencia de Apache.
    PBZIP2: Pthreads paralelos - puesta en práctica basada en el C++ de Jeff Gilchrist.
    SelfImage: Nominal un toner del disco de Windows, SelfImage también maneja bzip2 el archivo paralelo de/compression
    bzip2smp: una modificación a libbzip2 que tiene " de la paralelización del SMP ; in" cortado; de Konstantin Isakov.
    smpbzip2: Otros van en bzip2 paralelo, por Niels Werensteijn.
    pyflate: un pitón puro bzip2 independiente y el DESINFLAN el decodificador de ( Gzip ) de Paul Sladen. Probablemente útil para la investigación y la creación de un prototipo, hecho disponible bajo DEB / GLP / LGPL / DFSG autoriza.
  • Ver también


    la lista archivo da formato a
    Lista de los archivers del archivo
    Comparación de los archivers del archivo
    Lista de los programas de Unix
    Rzip, un sistema en grande de la compresión que utiliza Bzip2 como un compresor de segunda planta que sigue una etapa del diccionario de LZ77-style.
  • Zenithic
  • Oldham Sixth Form College
    Random links:Bigfoot | Cinco dinastías y período de diez reinos | Intervención financiera | Nik Kershaw | Doliolida

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">