Pergunta

Esta questão sobre o arquivamento de PDF me perguntando - se eu queria compressa (para fins de arquivamento) lotes de arquivos que são essencialmente pequenas mudanças feitas em cima de um modelo mestre (um timbre), parece enorme compressão ganhos podem ser tido com compressão inter-arquivo.

Siga um destes padrão de compressão / arquivamento formatos suportam isso? AFAIK, todos os formatos populares concentrar em comprimir cada arquivo único.

Foi útil?

Solução

Vários formatos de compressão fazer inter-arquivo.

O exemplo mais antigo é .tar.gz; um .tar não tem compressão, mas concatena todos os arquivos juntos, com cabeçalhos antes de cada arquivo e um .gz pode comprimir apenas um arquivo. Ambos são aplicados em sequência, e é um formato tradicional no mundo Unix. .tar.bz2 é o mesmo, apenas com bzip2 em vez de gzip.

Exemplos mais recentes são formatos com compressão opcional "sólida" (por exemplo, RAR e 7-Zip), que pode concatenar internamente todos os arquivos antes de compressão, se habilitado por uma opção de sinalizador de linha de comando ou GUI.

Outras dicas

Dê uma olhada-vcdiff aberto do Google.

http://code.google.com/p/open-vcdiff/

Ele é projetado para calcular pequenas deltas compactados e implementos RFC 3284.

http://www.ietf.org/rfc/rfc3284.txt

A Microsoft tem uma API para fazer algo semelhante, sans qualquer aparência de um padrão.

Em geral, os algoritmos que você está procurando são os baseados em Bentley / McIlroy:

http://citeseerx.ist.psu.edu /viewdoc/summary?doi=10.1.1.11.8470

Em particular, estes algoritmos será uma vitória, se o tamanho do molde é maior do que o tamanho da janela (~ 32k) usado por gzip ou o tamanho do bloco (100-900k) usado por bzip2.

Eles são usados ??pelo Google internamente dentro de sua implementação Bigtable para armazenar comprimidos páginas da web para muito a mesma razão que você está procurando-los.

Uma vez que a compressão LZW (que praticamente todos eles usam) envolve a construção de uma tabela de caracteres repetidos como você ir junto, como esquema como você deseja seria limitá-lo a ter que descompactar todo o arquivo ao mesmo tempo.

Se isto é aceitável em sua situação, pode ser mais simples de implementar um método que apenas se junta a seus arquivos em um arquivo grande antes da compressão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top