/ / Existe uma maneira de obter o tamanho do arquivo gzip expandido sem realmente expandir? - rubi, gzip

Existe uma maneira de obter o tamanho do arquivo gzip expandido sem realmente expandir? - rubi, gzip

Como a expansão de um arquivo gzip grande leva bastantemuito tempo (às vezes mais de meio minuto), eu gostaria de saber o tamanho expandido antes de iniciar a expansão (para fins de relatório de progressão). Existe uma maneira de conhecê-lo sem realmente expandir?

Atualizar:

Para arquivos maiores que 4G bytes (tamanho expandido),não há como saber o tamanho sem expandir o arquivo gzip. No entanto, para arquivos menores que 4G bytes (tamanho expandido), o tamanho expandido real é armazenado como os últimos 4 bytes do arquivo gzip e pode ser recuperado facilmente :

(1..4).inject(0) do |v, i|
v += IO.read(file_name, 1, original_size - i)[0] * (2**8) ** (4 - i)
end

Respostas:

2 para resposta № 1

Só quero fechar esta pergunta porque encontrei a solução. Atualizei-a acima.


1 para resposta № 2

Eu não acho que você pode obter um tamanho exato, poisexigiria o conhecimento das freqüências reais de várias strings em um arquivo, e você não pode fazer isso sem verificar o arquivo. Você pode ir para a função de descompressão real e fazer com que indique a que distância da entrada está (vs quão longe no saída é)?