3

假設我們壓縮例如.txt文件,其具有字節大小。壓縮並轉換爲.zip文件後,大小將爲字節。我們如何估算壓縮文件的「開銷」?

有沒有辦法估計或計算「開銷」的近似大小?

什麼因素影響開銷大小?

Zlib計算開銷:他們說:「......只有擴展是每個16 KB塊(約0.03%)的開銷爲五個字節,加上整個流的一次性開銷爲六個字節。

我只是把這個網站告訴它可以估計「開銷」的大小。

注意開銷是一些額外的數據添加到壓縮版本的數據。

回答

1

the ZIP format ..

假設只有一個中央目錄和沒有意見和沒有額外的字段,開銷應該是類似於以下。 (塔頂只會上去如果添加任何額外的元數據。)

  • 每文件(本地文件頭) - 30 + LEN(文件名)
  • 每文件(數據描述符) - 12(16)
  • 每文件(中央目錄標題) - 46 + LEN(文件名)
  • 每個歸檔(EOCD) - 22

這樣的開銷,其中afn是所有文件名的平均長度,和f是文件數:

f * ((30 + afn) + 12 + (46 * afn)) + 22 
= f * (88 + 2 * afn) + 22 

這當然使得ZIP一個很差選擇對於其中不需要(文件)結構或元數據的壓縮數據的非常微小的位 - zlib,在另一方面,是一種非常薄放氣包裝。

對於小有效載荷,一個放氣差實現也可能導致較大的顯著「壓縮」的大小,比如臭名昭著的.NET實現..


實例:

  • 存儲1文件,名稱爲「hello world note」。TXT」(LEN = 20),

    = 1 * (88 + 2 * 20) + 22 = 150開銷字節

  • 存儲100個文件,用14個字母的平均名稱,

    = 100 * (88 + 2 * 14) + 22 = 11622開銷字節

+0

太謝謝你了。例如我不知道如何獲得(EOCD)大小,以及如何計算'afn'?再次感謝。 – user3184352

+0

'afn =(len(filename1)+ len(filename2 )+ LEN(filename3)+ ..)/ number_of_fi與其他假設(例如,沒有附加,因此沒有重複的CD條目),只有一個22字節的EOCD。 – user2864740

+0

你是說EOCD對於所有文件總是22? 「數據描述符」和「本地文件頭」分別總是16和30? – user3184352

相關問題