Bzip2
le bzip2 est un l'algorithme sans perte ouvert libre de la compression de données de de la source de et et le programme développé par le Julian Seward . Seward a fait le premier dégagement public de bzip2, la version 0. La stabilité et la popularité du compresseur se sont développées au-dessus des plusieurs années à venir, et de la version libérée 1.0 de Seward vers la fin de 2000.
Efficacité de compression
bzip2 comprime la plupart des dossiers plus effectivement qu'un plus traditionnel Gzip ou une FERMETURE ÉCLAIR mais est plus lent. De cette manière il est assez semblable à d'autres algorithmes de compression de récent-génération. À la différence d'autres formats tels que RAR ou FERMETURE ÉCLAIR (et semblable au gzip), bzip2 est seulement un compresseur de données, pas un archiver. Le programme lui-même n'a aucun équipement pour les dossiers multiples, chiffrage ou archive-division, dans la tradition d'UNIX se fondant à la place sur des utilités externes séparées telles que le goudron et le GnuPG pour ces tâches.Comme indiqué dans la première page du site Web bzip2, dans la plupart des cas bzip2 est surpassé par LZMA et algorithmes de la page par minute en termes d'efficacité absolue de compression. Selon l'auteur, bzip2 obtient à moins de dix à quinze pour cent de page par minute, tout en étant rudement deux fois aussi rapidement la compression et six fois à plus rapidement à la décompression.
bzip2 utilise le Burrows-Rouleur de transforme pour convertir des ordres fréquemment périodiques de caractère en cordes des lettres identiques, et puis applique un Déplacer-à-avant transforme et finalement codage de Huffman de . Dans bzip2 les blocs sont généralement toutes les mêmes tailles dans le plaintext, qui peut être choisi par une commande-ligne argument entre le kB - de 100 le kB 900. Des blocs de compression sont délimités par un ordre de 48 bits (nombre magique ) dérivé de la représentation de la décimale codée en binaire du π , 0x314159265359 de , avec l'extrémité-de-jet pareillement délimité par une valeur représentant la racine carrée (π de ), 0x177245385090.
À l'origine, le bzip d'ancêtre de bzip2 a employé le codage arithmétique après le blocksort ; ceci a été discontinué en raison de la restriction du brevet à remplacer par le codage de Huffman de actuellement utilisé dans bzip2.
bzip2 est connu pour être extrêmement lent à la compression, faisant des personnes opter pour des solutions de rechange telles que le Gzip ou le RAR quand le temps est une issue. Ce problème est asymétrique, car la décompression est relativement rapidement. Motivé par le grand temps- CPU exigé pour la compression, une version modifiée a été créée en 2003 que le soutenu multifile, donnant des améliorations significatives de vitesse sur multi-unité centrale de traitement et ordinateurs multinucléaires. À partir de 2007 cette fonctionnalité n'a pas été incorporée au projet principal.
Pile de compression
Bzip2 emploie plusieurs couches de techniques de compression empilées sur l'un l'autre, qui se produisent dans l'ordre suivant pendant la compression et l'ordre d'inversion pendant la décompression : codage (RLE) de Courir-longueur de : n'importe quel ordre de 4 à 255 symboles doubles consécutifs est remplacé par les quatre premiers symboles et une longueur de répétition entre 0 et 251. Ainsi le" d'ordre ; AAAAAAABBBBCCCD" ; est remplacé par le " ; AAAA \ 3BBBB \ 0CCCD" ; . Des séries de symboles sont toujours transformées après quatre symboles consécutifs, même si la courir-longueur est placée à zéro, pour maintenir la transformation réversible. Dans le pire des cas, elle peut causer une expansion de pre-BWT de 1.25 et dans le meilleur cas une réduction à <0.02 de format document. Noter que tandis que les spécifications tiennent compte théoriquement des séries de longueur 256 - 259 à coder, ceci n'est pas dans la pratique réalisé dû à l'utilisation du " limité ; char" ; datatype pour stocker et charger des longueurs de RLE. L'auteur considère cette étape une erreur historique -- elle n'améliore pas réellement la compression beaucoup, et a été prévue pour protéger l'algorithme de BWT contre des cas pathologiques. local beaucoup de " ; natural" ; les données contiennent les symboles identiques qui se reproduisent dans une marge limitée (le texte est un bon exemple). Pendant que les MTF transforment assignent des valeurs basses aux symboles qui réapparaissent fréquemment, ceci a comme conséquence un train de données de données qui contient beaucoup de symboles dans la basse gamme de nombre entier, bon nombre d'entre eux étant identiques (les différents symboles périodiques d'entrée peuvent réellement tracer au même symbole de rendement). De telles données peuvent être très efficacement codées par n'importe quelle méthode de compression de legs.
RUNA et RUNB, qui représentent la courir-longueur comme nombre binaire plus considérablement qu'un (1). L'ordre 0,0,0,0,0,1 serait représenté comme 0, RUNB, RUNA, 1 ; RUNB et RUNA représentant la valeur 4 dans la décimale. Le code de courir-longueur est terminé en atteignant un autre symbole normal. Ce processus de RLE est plus flexible que le RLE de l'étape 1, car il peut coder arbitrairement de longs nombres entiers (dans la pratique, ceci est habituellement limité par la longueur de bloc, de sorte que cette étape ne code pas une série de plus de 900000 bytes). La courir-longueur est codée de cette fa4con : l'attribution des valeurs d'endroit de 1 au premier peu, de 2 à la seconde, de 4 au tiers, etc. dans l'ordre de RUNA/RUNB, multiplient chaque valeur d'endroit dans une tache de RUNB par 2, et ajoutent toutes les valeurs d'endroit en résultant (pour des valeurs de RUNA et de RUNB de même) ensemble. Ainsi, l'ordre RUNB, RUNA a comme conséquence la valeur (1*2 + 2) = 4. Comme exemple plus compliqué : RUNA RUNB RUNA RUNA RUNB (ABAAB)
&NBSP ;   ;   ; 1  ;   ;   ;   ; 2  ;   ;   ;   ; 4  ;   ;   ;   ; 8  ;   ;   ; 16
  ;   ;   ; 1  ;   ;   ;   ; 4  ;   ;   ;   ; 4  ;   ;   ;   ; 8  ;   ;   ; 32 = 49 Codage de Huffman de : ce processus remplace des symboles de longueur fixe (octets) par des codes de longueur variable basés sur la fréquence de l'utilisation. Les codes plus fréquemment utilisés finissent vers le haut plus court (2 ou 3 bits) tandis que des codes rares peuvent être assignés jusqu'à 20 bits. Les codes sont choisis soigneusement de sorte qu'aucun ordre de peu ne puisse être confus pour un code différent d'extrémité-de-jet de code.The soit particulièrement intéressant. S'il y a différents bytes du n (symboles) utilisés dans les données non comprimées, alors le code de Huffman se composera de deux codes de RLE (RUNA et RUNB), de codes de symbole du n-1 et d'un code d'extrémité-de-jet. En raison du résultat combiné des codages de MTF et de RLE dans les deux étapes précédentes, il n'y a jamais n'importe quel besoin de mettre en référence explicitement le premier symbole dans la table de MTF, ainsi le symbole de l'économie une pour le marqueur d'extrémité-de-jet (et expliquer pourquoi seulement des symboles du n-1 sont codés dans l'arbre de Huffman). Dans le cas extrême où seulement un symbole est employé dans les données non comprimées, il n'y aura aucun code de symbole du tout dans l'arbre de Huffman, et le bloc entier se composera de RUNA et RUNB (répétant implicitement le byte simple) et un marqueur d'extrémité-de-jet avec la valeur 2.
0 : RUNA
1 : RUNB
2-257 : le byte évalue 0-255
258 : fin de jet, procédé de finition. (pourrait être aussi bas que le 2). Le multiple Huffman ajourne : plusieurs tables identique-classées de Huffman peuvent être employées avec un bloc si le gain de les employer est plus grand que le coût d'inclure la table supplémentaire. Au moins deux (2) et jusqu'à six (6) tables peuvent être présentes, avec la table la plus appropriée étant resélectionnée avant chaque 50 symboles traités. Ceci a l'avantage de avoir la dynamique très sensible de Huffman sans devoir sans interruption fournir de nouvelles tables, comme serait exigé dans le DÉGONFLENT . le codage de Courir-longueur dans l'étape précédente est conçu pour prendre soin des codes qui ont une probabilité inverse d'utilisation plus haut que le code de Huffman de code le plus court en service.
Format de fichier
Un jet de.bz2 se compose d'un en-tête de 4 bytes, suivi les blocs zéro ou plus comprimés, immédiatement suivis d'un marqueur d'extrémité-de-jet contenant un centre de détection et de contrôle à 32 bits pour le jet entier de plaintext traité. Les blocs comprimés peu-sont alignés et aucune remplissage ne se produit. < ! -- /* Paul Sladen, 2007-01-11 * -->
.magic : 16 = signature du « BZ »/nombre magique .version : 8 = « h » pour Bzip2 ('codage de H'uffman), « 0 » pour Bzip1 (désapprouvé) taille de .hundred_k_block : 8 = « 1 ». « 9 » kB de la bloquer-taille 100 kB-900.com pressed_magic : 48 = 0x314159265359 (BCD (pi)) .crc : 32 = somme pour ce bloc .randomised : 1 = 0=>normal, 1=>randomised (désapprouvé) .origPtr : 24 = engageant l'indicateur dans BWT pour après l'untransform .huffman_used_map : 16 = carte binaire, des gammes de 16 bytes, présent/pas présent .huffman_used_bitmaps : 0.256 = carte binaire, des symboles utilisés, actuel/pas présent (multiples de 16) .huffman_groups : le nombre 3 = 2.6 de Huffman différent ajourne en service .selectors_used : 15 = nombre de fois que le Huffman ajourne sont
- (de chaque 50 bytes) .6 = zéro-a terminé les séries de peu (0.62) de table de MTF'ed Huffman (*selectors_used)
deltas de Huffman .40 = symbole 0=>next ; longueur 1=>alter {longueur 1=>decrement ; longueur 0=>increment} (* (symbols+2)*groups) .∞ = train de données de données codé par Huffman jusqu'à l'extrémité du bloc
.eos_magic : 48 = 0x177245385090 (racine carrée de BCD (pi)) .crc : 32 = somme pour le jet entier .7 = alignent sur le byte entier
Note pour des réalisateurs : En raison de la compression du premier étage de RLE (voir ci-dessus), la longueur maximum du plaintext qui un 900  simple ; le bloc du kB bzip2 peut contenir est autour de 46  ; Mb (45,899,235  ; bytes). Ceci peut se produire si le plaintext entier consiste entièrement en valeurs répétées (le dossier en résultant de .bz2 est dans ce cas-ci 46  ; bytes long).
Utilisation
Dans le Unix , bzip2 peut être employé a combiné avec ou indépendamment du goudron : dossier du bzip2 à comprimer et bzip2 - d file.bz2 aux uncompress (le de nom d'emprunt bunzip2 pour la décompression peut également être employé).la ligne de commande de bzip2 drapeaux sont la plupart du temps la même que dans le Gzip . Ainsi, pour extraire à partir d'un goudron-dossier de bzip2-compressed :
bzip2 - d < archivefile .bz2 | goudron - xf - ou bunzip2 < archivefile .bz2 | goudron - xf -
Pour créer un goudron-dossier de bzip2-compressed :
goudron - Cf - noms de fichier de | bzip2 > archivefile .bz2
Le goudron de GNU soutient a - le drapeau de j, qui permet la création des dossiers tar.bz2 sans canalisation : goudron - dossier-liste archivefile de du .bz2 de cjf
Décompression dans le goudron de GNU : goudron - archivefile .bz2 de xjf
Réalisations
bzip2 : Exécution originale de référence de s de Julian Seward 'disponible sous un permis de schéma de . 7-Zip : écrit par Igor Pavlov dans le C++ , la suite 7-Zip contient un encodeur bzip2/décodeur qui est librement autorisé.
micro-bzip2 : une version par Rob Landley a conçu pour le nombre d'instructions compilé réduit et disponible sous le LGPL de GNU.bzip2 : Exécution de Java du système de construction de la fourmi d'Apache de disponible sous le permis d'Apache de .
PBZIP2 : Pthreads parallèles - exécution basée de dans le C++ par Jeff Gilchrist.
SelfImage : Nominalement une encre en poudre de disque de Windows, SelfImage manipule également bzip2 le dossier parallèle de/compression
bzip2smp : une modification à
libbzip2 qui a le " de parallélisation de la SMP ; in" entaillé ; par Konstantin Isakov. smpbzip2 : Des autres s'attaquent à bzip2 parallèle, par Niels Werensteijn.
pyflate : un python pur bzip2 autonome de et le DÉGONFLENT le décodeur de ( Gzip ) par Paul Sladen. Probablement utile pour la recherche et le prototypage, rendu disponible sous le schéma / GPL / LGPL / DFSG autorise.
Voir également
la liste d'archives compose
Liste de des archivers de dossier
Comparaison de des archivers de dossier
Liste de des programmes d'Unix
Rzip , un système à grande échelle de compression qui emploie Bzip2 comme un compresseur du deuxième étage suivant une étape de dictionnaire de LZ77-style.
| Random links: | ROM de Vieux Monde | Shane Rimmer | Méthode de Moscou | Kime-aucun-kata | Bzip2 |