O algoritmo de compactação usado no zlib é essencialmente o mesmo que o gzip e zip . O que são gzip e zip ? Como eles são diferentes e como são os mesmos?
O algoritmo de compactação usado no zlib é essencialmente o mesmo que o gzip e zip . O que são gzip e zip ? Como eles são diferentes e como são os mesmos?
Respostas:
Forma curta:
.zip
é um formato de arquivamento usando, geralmente, o método de compactação Deflate . O .gz
formato gzip é para arquivos únicos, também usando o método de compactação Deflate. Muitas vezes gzip é usado em combinação com tar para fazer um formato de arquivo comprimido , .tar.gz
. A biblioteca zlib fornece o código de compactação e descompactação do Deflate para uso por zip, gzip, png (que usa o wrapper zlib para desinflar os dados) e muitos outros aplicativos.
Forma longa:
O formato ZIP foi desenvolvido por Phil Katz como um formato aberto com uma especificação aberta, onde sua implementação, PKZIP, era shareware. É um formato de arquivo que armazena arquivos e sua estrutura de diretórios, onde cada arquivo é compactado individualmente. O tipo de arquivo é .zip
. Os arquivos, bem como a estrutura de diretórios, podem opcionalmente ser criptografados.
O formato ZIP suporta vários métodos de compactação:
0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1
Os métodos 1 a 7 são históricos e não estão em uso. Os métodos 9 a 98 são adições relativamente recentes e estão em pequenas quantidades variadas de uso. O único método amplamente utilizado no formato ZIP é o método 8, Deflate , e em menor medida o método 0, que não é compactação. Praticamente todos os .zip
arquivos que você encontrará no ambiente selvagem usarão exclusivamente os métodos 8 e 0, provavelmente apenas o método 8. (O método 8 também possui um meio de armazenar efetivamente os dados sem compactação e relativamente pouca expansão, e o método 0 não pode ser transmitido em fluxo contínuo considerando que o método 8 pode ser.)
O padrão ISO / IEC 21320-1: 2015 para contêineres de arquivos é um formato zip restrito, como usado em arquivos Java (.jar), arquivos Office Open XML (Microsoft Office .docx, .xlsx, .pptx), Documento do Office Formate arquivos (.odt, .ods, .odp) e arquivos EPUB (.epub). Esse padrão limita os métodos de compactação a 0 e 8, além de outras restrições, como nenhuma criptografia ou assinaturas.
Por volta de 1990, o grupo Info-ZIP criou implementações zip
e unzip
utilitários portáteis, gratuitos e de código aberto , suportando a compactação com o formato Deflate e a descompactação desse e dos formatos anteriores. Isso expandiu bastante o uso do .zip
formato.
No início dos anos 90, o formato gzip foi desenvolvido como um substituto para o utilitário Unixcompress
, derivado do código Deflate nos utilitários Info-ZIP. O Unix compress
foi projetado para compactar um único arquivo ou fluxo, acrescentando um .Z
ao nome do arquivo. compress
usa o algoritmo de compactação LZW , que estava sob patente e seu uso gratuito estava em disputa pelos detentores de patentes. Embora algumas implementações específicas do Deflate tenham sido patenteadas por Phil Katz, o formato não era e, portanto, foi possível escrever uma implementação do Deflate que não viola nenhuma patente. Essa implementação não foi tão contestada nos últimos 20 anos. O gzip
utilitário Unix foi concebido como um substituto para ocompress
e, de fato, é capaz de descompactar compress
dados compactados (supondo que você tenha conseguido analisar essa frase). gzip
anexa .gz
a ao nome do arquivo. gzip
usa o formato de dados compactados Deflate, que compacta um pouco melhor que o Unix compress
, possui descompressão muito rápida e adiciona um CRC-32 como verificação de integridade dos dados. O formato do cabeçalho também permite o armazenamento de mais informações do que o compress
formato permitido, como o nome do arquivo original e a hora da modificação do arquivo.
Embora compress
apenas comprima um único arquivo, era comum usar o tar
utilitário para criar um archive de arquivos, seus atributos e sua estrutura de diretórios em um único .tar
arquivo e compactá-lo compress
para criar um .tar.Z
arquivo. De fato, o tar
utilitário tinha e ainda tem uma opção para fazer a compactação ao mesmo tempo, em vez de canalizar a saída de tar
para compress
. Isso tudo foi transferido para o formato gzip e tar
tem uma opção para compactar diretamente no .tar.gz
formato. O tar.gz
formato compacta melhor que a .zip
abordagem, pois a compactação de um .tar
pode tirar proveito da redundância entre arquivos, especialmente muitos arquivos pequenos. .tar.gz
é o formato de arquivo mais comum em uso no Unix devido à sua portabilidade muito alta, mas também existem métodos de compactação mais eficazes, portanto você verá .tar.bz2
e .tar.xz
arquivará frequentemente .
Ao contrário .tar
, .zip
possui um diretório central no final, que fornece uma lista do conteúdo. Isso e a compactação separada fornecem acesso aleatório às entradas individuais em um .zip
arquivo. Um .tar
arquivo precisaria ser descompactado e verificado do começo ao fim para criar um diretório, e é assim que um .tar
arquivo é listado.
Logo após a introdução do gzip, em meados da década de 90, a mesma disputa de patentes questionou o uso gratuito do .gif
formato de imagem, amplamente utilizado em quadros de avisos e na World Wide Web (algo novo na época). Portanto, um pequeno grupo criou o formato de imagem compactado sem perdas PNG, com o tipo de arquivo .png
, para substituir .gif
. Esse formato também usa o formato Deflate para compactação, que é aplicado após os filtros nos dados da imagem exporem mais redundância. Para promover o uso generalizado do formato PNG, foram criadas duas bibliotecas de códigos gratuitas. libpng e zlib. A libpng tratou de todos os recursos do formato PNG e o zlib forneceu o código de compactação e descompactação para uso pela libpng, bem como para outros aplicativos. O zlib foi adaptado do gzip
código.
Todas as patentes mencionadas expiraram desde então.
A biblioteca zlib suporta a compactação e descompactação Deflate e três tipos de agrupamento em torno dos fluxos de deflate. São eles: nenhum empacotamento (deflate "bruto"), empacotamento zlib , usado nos blocos de dados no formato PNG e empacotamento gzip, para fornecer rotinas gzip para o programador. A principal diferença entre o zlib e o gzip wrapping é que o zlib wrapping é mais compacto, seis bytes vs. um mínimo de 18 bytes para o gzip, e a verificação de integridade Adler-32 é executada mais rapidamente que o CRC-32 que o gzip usa. A desinflação bruta é usada por programas que lêem e gravam o .zip
formato, que é outro formato que envolve a desinfecção de dados compactados.
O zlib agora é amplamente utilizado para transmissão e armazenamento de dados. Por exemplo, a maioria das transações HTTP de servidores e navegadores comprime e descompacta os dados usando o zlib, especificamente o cabeçalho HTTP Content-Encoding: deflate
significa desinflar o método de compactação envolvido dentro do formato de dados do zlib .
Diferentes implementações de desinflar podem resultar em diferentes saídas compactadas para os mesmos dados de entrada, conforme evidenciado pela existência de níveis de compactação selecionáveis que permitem negociar a eficácia da compactação pelo tempo da CPU. zlib e PKZIP não são as únicas implementações de desinflar a compactação e descompactação. Tanto o utilitário de arquivamento 7-Zip quanto a biblioteca zopfli do Google têm a capacidade de usar muito mais tempo de CPU que o zlib, a fim de reduzir os últimos bits possíveis ao usar o formato deflate, reduzindo os tamanhos compactados em alguns por cento em comparação ao valor mais alto do zlib nível de compressão. O utilitário pigz, uma implementação paralela do gzip, inclui a opção de usar zlib (níveis de compactação 1-9) ou zopfli (nível de compactação 11) e mitiga um pouco o impacto no tempo do uso do zopfli, dividindo a compactação de arquivos grandes em vários processadores e núcleos.
.tar.gz
arquivos, é isso que eles são.) Primeiro, o tar + gzip compacta melhor que o zip, pois a compactação do próximo arquivo pode usar o histórico do arquivo anterior (às vezes chamado de arquivo "sólido"). O zip só pode compactar arquivos individualmente. Segundo, o tar preserva todas as informações do diretório Unix, enquanto o zip não foi projetado para fazer isso. (Extensões posteriores para o formato zip com específicos do Unix extra quadras tentativas para resolver este problema.)
ZIP é um formato de arquivo usado para armazenar um número arbitrário de arquivos e pastas junto com a compactação sem perdas. Ele não faz suposições estritas sobre os métodos de compactação usados, mas é usado com mais frequência com DEFLATE .
O gzip é um algoritmo de compactação baseado no DEFLATE, mas menos onerado com possíveis patentes et al., E um formato de arquivo para armazenar um único arquivo compactado. Ele suporta a compactação de um número arbitrário de arquivos e pastas quando combinado com o tar . O arquivo resultante tem uma extensão de .tgz
ou .tar.gz
e é geralmente chamado de tarball .
O zlib é uma biblioteca de funções que encapsula o DEFLATE em sua encarnação LZ77 mais comum .
A diferença mais importante é que o gzip é capaz apenas de compactar um único arquivo, enquanto o zip compacta vários arquivos um por um e os arquiva em um único arquivo posteriormente. Assim, o gzip vem junto com o tar na maioria das vezes (existem outras possibilidades). Isso vem junto com algumas (des) vantagens.
Se você possui um grande arquivo e precisa apenas de um único arquivo, é necessário descompactar todo o arquivo gzip para chegar a esse arquivo. Isso não é necessário se você tiver um arquivo zip.
Por outro lado, se você compactar 10 arquivos semelhantes ou mesmo idênticos, o arquivo zip será muito maior porque cada arquivo é compactado individualmente, enquanto no gzip, em combinação com o tar, um único arquivo é compactado, o que é muito mais eficaz se os arquivos forem compactados. semelhante (igual).