Questão Por que um arquivo zip parece maior que o arquivo de origem, especialmente quando é texto?


Eu tenho um arquivo de texto que é 19 bytes de tamanho e tendo comprimido o arquivo usando zip e 7zip, parece ser maior. Eu tinha lido a pergunta sobre Por que um arquivo 7zipped é maior que o arquivo raw? assim como Por que a Compactação ZIP não comprime nada? mas considerando que o arquivo ainda não está compactado, eu teria esperado mais compressão. Anexado é uma captura de tela.

enter image description here

EDIT0

Eu levei o exemplo ainda mais, criando um arquivo que continha dados aleatórios da seguinte forma dd if=/dev/urandom of=sample.log bs=1G count=1 e tentou compactar o arquivo usando zip e 7zip, mas não houve ganhos de compactação. Por que é que?

enter image description here


4


origem


E isso é um arquivo de log de texto simples de 1 GB? - CyberSkull
@CyberSkull - Sim, é. - PeanutsMonkey
Você pode nos dizer quais foram os seus parâmetros de zip? Eu teria feito algo como zip -9T "example.zip" sample.log (-t é apenas para testar a integridade do arquivo. - CyberSkull
Dados aleatórios de / dev / urandom fazem não gerar um arquivo de texto verdadeiro; não comprimirá bem nada. Bytes de texto são limitados no intervalo, com muitos espaços e padrões de repetição (por exemplo, "th" e "sp") e palavras. Você de fato gerou um arquivo binário aleatório. - Ken
@CyberSkull: Não, você tem um fluxo aleatório de caracteres ASCII. O que é um pouco mais compacto que o binário aleatório, mas ainda assim não é tão estruturado quanto o texto. - Ben Voigt


Respostas:


Como @kinokijuf disse, há um cabeçalho de arquivo. Mas para expandir isso, há algumas outras coisas para entender sobre a compactação de arquivos.

O cabeçalho zip contém todas as informações necessárias para identificar o tipo de arquivo (o número mágico), a versão zip e, finalmente, uma listagem de todos os arquivos incluídos no arquivo.

Seu arquivo provavelmente não foi compactado de qualquer maneira. Se você correr unzip -l example.zip provavelmente você verá que o tamanho do arquivo não foi alterado. 19 bytes provavelmente gerariam mais sobrecarga do que seria salvo se fosse compressível por DEFLATE (o principal método de compactação usado pelo zip).

Em outros casos, imagens PNG, por exemplo, já estão compactadas, então o zip apenas as armazenará. O DEFLATE não incomodará a compactação de nada já compactado.

Se, por outro lado, você tivesse muitos arquivos de texto, e seu tamanho fosse mais do que alguns kilobytes cada, você obteria grandes economias colocando-os todos em um solteiro arquivo zip.

Você obterá suas melhores economias ao compactar dados formatados muito regulares, como um arquivo de texto contendo um dump SQL. Por exemplo, uma vez eu tive um despejo de um pequeno banco de dados SQL em torno de 13MB. Irã zip -9 dump.sql dump.zip e acabou com cerca de 1MB depois.

Outro fator é o seu nível de compressão. Muitos arquivadores, por padrão, só compactam em nível médio, indo para velocidade sobre redução. Ao comprimir com zip, tente o -9 flag para compressão máxima (acho que o manual 3.x diz que os níveis de compressão são suportados apenas por DEFLATE neste momento).

TL; DR

A sobrecarga para o arquivo excedeu todos os ganhos que você possa ter obtido para compactar o arquivo. Tente colocar arquivos de texto maiores lá e veja o que você recebe. Use o -v bandeira quando zipping para ver suas economias como você vai.


7



Quando você diz que o tamanho do arquivo está inalterado se eu fosse descompactá-lo, você quer dizer o tamanho do arquivo? Em segundo lugar, se eu fosse usar um método de compressão diferente do DEFLATE como o PPMD, isso faria diferença? Então, quando você diz o -V bandeira você quer dizer quando eu executar o zip comando? - PeanutsMonkey
Além disso, quando você diz tipo de arquivo, você quer dizer o tipo de arquivo que a fonte é, e. texto, MP3, etc? - PeanutsMonkey


Porque a sobrecarga de cabeçalhos zip é caminho maior que 19 bytes.


4



Como isso afeta arquivos de texto maiores? - PeanutsMonkey


A compactação remove informações redundantes, que aparecem quando os dados são altamente estruturados.

A partir disso, deve ficar evidente que os arquivos já compactados não podem ser mais compridos, porque a redundância já desapareceu, mas também que os dados aleatórios não serão bem compactados, porque nunca tiveram nenhuma estrutura ou redundância.

Existe toda uma ciência, a teoria da informação, que lida com a medição da densidade de informações (e informações mútuas) e usa redundância e estrutura para realizar a compactação, ataques à criptografia e detecção e recuperação de erros.


1