Pagina inicial » como » Por que o Zip é capaz de compactar arquivos simples melhor do que vários arquivos com o mesmo conteúdo?

    Por que o Zip é capaz de compactar arquivos simples melhor do que vários arquivos com o mesmo conteúdo?

    A capacidade de compactar nossos arquivos para facilitar o compartilhamento e / ou o transporte deles pode tornar nossa vida eletrônica muito mais fácil, mas às vezes podemos ver resultados de tamanhos estranhos ou inesperados depois de compactá-los. Por que é que? A postagem de perguntas e respostas do SuperUser de hoje tem as respostas para as perguntas de um leitor confuso.

    A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..

    Foto cedida por Jean-Etienne Minh-Duy Poirrier (Flickr).

    A questão

    O leitor de superusuário sixtyfootersdude quer saber porque o zip é capaz de compactar arquivos únicos melhor do que vários arquivos com o mesmo tipo de conteúdo:

    Suponha que eu tenha 10.000 arquivos XML e queira enviá-los para um amigo. Antes de enviá-los, gostaria de comprimi-los.

    Método 1: não compactá-los

    Resultados:

    Método 2: compactar todos os arquivos separadamente e enviar para ele 10.000 arquivos XML compactados

    Comando:

    Resultados:

    Método 3: Criar um único arquivo zip contendo todos os arquivos XML 10.000

    Comando:

    Resultados:

    Método 4: concatenar os arquivos em um único arquivo e zip it

    Comando:

    Resultados:

    Questões

    • Por que obtenho resultados tão drasticamente melhores quando estou apenas fechando um único arquivo?
    • Eu estava esperando obter resultados drasticamente melhores usando o método 3 em vez do método 2, mas não o faço. Por que é isso?
    • Esse comportamento é específico para zip? Se eu tentasse usar o Gzip, obteria resultados diferentes?

    Informação adicional

    Metadados

    Uma das respostas dadas sugere que a diferença são os metadados do sistema armazenados no arquivo zip. Eu não acredito que isso possa ser o caso. Para testá-lo, fiz o seguinte:

    O arquivo zip resultante é de 1,4 MB. Isso significa que ainda há aproximadamente dez MB de espaço inexplicado.

    Por que o zip é capaz de compactar arquivos únicos melhor do que vários arquivos com o mesmo tipo de conteúdo??

    A resposta

    Os colaboradores do SuperUser, Alan Shutko e Aganju, têm a resposta para nós. Primeiro, Alan Shutko:

    A compactação de zip é baseada em padrões repetitivos nos dados a serem compactados, e a compactação fica melhor quanto mais tempo o arquivo estiver, já que mais e mais padrões podem ser encontrados e usados.

    Simplificado, se você compactar um arquivo, o dicionário que mapeia códigos (curtos) para padrões (mais longos) é necessariamente contido em cada arquivo zip resultante; se você compactar um arquivo longo, o dicionário será "reutilizado" e ficará ainda mais eficaz em todo o conteúdo.

    Se seus arquivos são um pouco parecidos (como o texto sempre é), a reutilização do 'dicionário' se torna muito eficiente e o resultado é um arquivo zip total muito menor.

    Seguido pela resposta de Aganju:

    No zip, cada arquivo é compactado separadamente. O oposto é compressão sólida, ou seja, os arquivos são compactados juntos. 7-zip e Rar usam compactação sólida por padrão. Gzip e Bzip2 não podem comprimir múltiplos arquivos, então Tar é usado primeiro, tendo o mesmo efeito que compressão sólida.

    Como os arquivos xml têm estrutura semelhante (e provavelmente conteúdo similar), se os arquivos forem compactados juntos, a compactação será mais alta.

    Por exemplo, se um arquivo contiver a string “”E o compressor já encontrou essa string em outro arquivo, ele irá substituí-lo por um pequeno ponteiro para a correspondência anterior. Se o compressor não usar compressão sólida, a primeira ocorrência da string no arquivo será gravada como uma literal, que é maior.


    Tem algo a acrescentar à explicação? Som desligado nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.