ZIP文件格式詳解(一)——文件數據格式html
----------------------------------------------------------------------------------算法
文檔說明app
ZIP 格式的壓縮文件是咱們經常使用的壓縮格式之一,他以其通用性、壓縮比高而在全球範圍內有不少的用戶,本文簡單介紹 ZIP 文件格式和算法。本文主要參照 http://www.pkware.com 提供的 appnote.txt 文件,你能夠從http://www.pkware.com/download.html 下載 appnote.zip 獲得這個文件。spa
做者:昏睡終日(Seread@163.com)htm
2002-10-28 16:32:25ip
本文僅做爲技術參考資料,我盡力的保證文檔的內容同原始技術文檔在結構和描述上的一致,如有不當的地方請見諒。文檔
本文檔的做者不爲使用本文檔信息所形成的任何損失負責。get
----------------------------------------------------------------------------------擴展
一個 ZIP 文件的普通格式技術文檔
----------------------
一個 ZIP 文件由三個部分組成:
壓縮源文件數據區+壓縮源文件目錄區+壓縮源文件目錄結束標誌
一、壓縮源文件數據區
在這個數據區中每個壓縮的源文件/目錄都是一條記錄,記錄的格式以下:
[文件頭+ 文件數據 + 數據描述符]
a、文件頭結構
組成 長度
文件頭標記 4 bytes (0x04034b50)
解壓文件所需 pkware 版本 2 bytes
全局方式位標記 2 bytes
壓縮方式 2 bytes
最後修改文件時間 2 bytes
最後修改文件日期 2 bytes
CRC-32校驗 4 bytes
壓縮後尺寸 4 bytes
未壓縮尺寸 4 bytes
文件名長度 2 bytes
擴展記錄長度 2 bytes
文件名 (不定長度)
擴展字段 (不定長度)
b、文件數據
c、數據描述符
組成 長度
CRC-32校驗 4 bytes
壓縮後尺寸 4 bytes
未壓縮尺寸 4 bytes
這個數據描述符只在全局方式位標記的第3位設爲1時才存在(見後詳解),緊接在壓縮數據的最後一個字節後。這個數據描述符只用在不能對輸出的 ZIP 文件進行檢索時使用。例如:在一個不能檢索的驅動器(如:磁帶機上)上的 ZIP 文件中。若是是磁盤上的ZIP文件通常沒有這個數據描述符。
二、壓縮源文件目錄區
在這個數據區中每一條紀錄對應在壓縮源文件數據區中的一條數據
組成 長度
目錄中文件文件頭標記 4 bytes (0x02014b50)
壓縮使用的 pkware 版本 2 bytes
解壓文件所需 pkware 版本 2 bytes
全局方式位標記 2 bytes
壓縮方式 2 bytes
最後修改文件時間 2 bytes
最後修改文件日期 2 bytes
CRC-32校驗 4 bytes
壓縮後尺寸 4 bytes
未壓縮尺寸 4 bytes
文件名長度 2 bytes
擴展字段長度 2 bytes
文件註釋長度 2 bytes
磁盤開始號 2 bytes
內部文件屬性 2 bytes
外部文件屬性 4 bytes
局部頭部偏移量 4 bytes
文件名 (不定長度)
擴展字段 (不定長度)
文件註釋 (不定長度)
三、壓縮源文件目錄結束標誌
組成 長度
目錄結束標記 4 bytes (0x02014b50)
當前磁盤編號 2 bytes
目錄區開始磁盤編號 2 bytes
本磁盤上紀錄總數 2 bytes
目錄區中紀錄總數 2 bytes
目錄區尺寸大小 4 bytes
目錄區對第一張磁盤的偏移量 4 bytes
ZIP 文件註釋長度 2 bytes
ZIP 文件註釋 (不定長度)