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

4

Eu tenho um arquivo de texto de 19 bytes e, depois de compactar o arquivo usando zip e 7zip, ele parece ser maior. Eu tive uma leitura da pergunta sobre Por que é um 7zipped arquivo maior que o arquivo bruto? bem como Por que a compactação ZIP não é comprimir qualquer coisa? mas, considerando que o arquivo ainda não está compactado, eu teria esperado mais compressão. Anexado é uma captura de tela.

EDIT0

Euleveioexemploadiantecriandoumarquivoquecontinhadadosaleatórioscomosegueddif=/dev/urandomof=sample.logbs=1Gcount=1etenteicompactaroarquivousandozipe7zip,masnãohouveganhosdecompactação.Porqueisso?

    
por PeanutsMonkey 29.08.2012 / 08:39

3 respostas

8

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ê executar unzip -l example.zip , provavelmente 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 único arquivo zip.

Você obterá sua melhor economia 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. Eu corri zip -9 dump.sql dump.zip e acabei 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 compactar com zip, tente o sinalizador -9 para compactação máxima (acho que o manual 3.x diz que os níveis de compactaçã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 sinal -v ao zipar para ver suas economias.

    
por 29.08.2012 / 09:08
4

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

    
por 29.08.2012 / 08:43
1

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

A partir disso, é 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 da informação (e informação mútua) e usa redundância e estrutura para realizar compressão, ataques à criptografia e detecção e recuperação de erros.

    
por 28.05.2013 / 21:27