ZIP文件格式詳解(一)——文件數(shù)據(jù)格式
?ZIP文件格式詳解(一)——文件數(shù)據(jù)格式
----------------------------------------------------------------------------------
文檔說明
ZIP 格式的壓縮文件是我們常用的壓縮格式之一,他以其通用性、壓縮比高而在全球范圍內(nèi)有很多的用戶,本文簡單介紹 ZIP 文件格式和算法。本文主要參照http://www.pkware.com/ 提供的 appnote.txt 文件,你可以從http://www.pkware.com/download.html 下載 appnote.zip 得到這個文件。
作者:昏睡終日(Seread@163.com)
2002-10-28
本文僅作為技術(shù)參考資料,我盡力的保證文檔的內(nèi)容同原始技術(shù)文檔在結(jié)構(gòu)和描述上的一致,若有不當(dāng)?shù)牡胤秸堃娬彙?span lang="EN-US">
本文檔的作者不為使用本文檔信息所造成的任何損失負責(zé)。
----------------------------------------------------------------------------------
?
一個 ZIP 文件的普通格式
----------------------
??? 一個 ZIP 文件由三個部分組成:
????????
??????? 壓縮源文件數(shù)據(jù)區(qū)+壓縮源文件目錄區(qū)+壓縮源文件目錄結(jié)束標志
?
?
????1、壓縮源文件數(shù)據(jù)區(qū)
??? 在這個數(shù)據(jù)區(qū)中每一個壓縮的源文件/目錄都是一條記錄,記錄的格式如下:
??????
?????? [文件頭+ 文件數(shù)據(jù) + 數(shù)據(jù)描述符]
?
?????? a、文件頭結(jié)構(gòu)
?????????組成???? ??????????????? 長度
??????文件頭標記??? ????????????? 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、文件數(shù)據(jù)
?
???????
??????? c、數(shù)據(jù)描述符
? 組成???? 長度
?? CRC-32校驗????????????????? 4 bytes
? 壓縮后尺寸?????????????????? 4 bytes
? 未壓縮尺寸?????????????????? 4 bytes
? ??? 這個數(shù)據(jù)描述符只在全局方式位標記的第3位設(shè)為1時才存在(見后詳解),緊接在壓縮數(shù)據(jù)的最后一個字節(jié)后。這個數(shù)據(jù)描述符只用在不能對輸出的 ZIP 文件進行檢索時使用。例如:在一個不能檢索的驅(qū)動器(如:磁帶機上)上的 ZIP 文件中。如果是磁盤上的ZIP文件一般沒有這個數(shù)據(jù)描述符。
???? 2、壓縮源文件目錄區(qū)
???? 在這個數(shù)據(jù)區(qū)中每一條紀錄對應(yīng)在壓縮源文件數(shù)據(jù)區(qū)中的一條數(shù)據(jù)
?
?? 組成?? ??? ??? ??? ??????????? 長度
??? 目錄中文件文件頭標記??? ? ?????? 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
??? 內(nèi)部文件屬性??? ?????????????? 2 bytes
??? 外部文件屬性??? ?????????????? 4 bytes
??? ??? 局部頭部偏移量??? ??? ????????? 4 bytes
??? 文件名?? ??? ??? ??????????? (不定長度)
??? 擴展字段??? ??? ??????????? (不定長度)
??? ??? 文件注釋??? ??? ??????????? (不定長度)
????3、壓縮源文件目錄結(jié)束標志
?
??? 組成?? ??? ??? ??? ????????? 長度
??? ??? 目錄結(jié)束標記??????????????????? 4 bytes? (0x02014b50)
??????? 當(dāng)前磁盤編號?? ??? ??? ???????? 2 bytes
??? ??? 目錄區(qū)開始磁盤編號????????????? 2 bytes
??? 本磁盤上紀錄總數(shù)??? ? ?????????? 2 bytes
??? 目錄區(qū)中紀錄總數(shù)??????? ???????? 2 bytes
??? 目錄區(qū)尺寸大小?????????????????? 4 bytes
??? 目錄區(qū)對第一張磁盤的偏移量??????? 4 bytes
??? ZIP 文件注釋長度??? ??????????? 2 bytes
??? ZIP 文件注釋??? ????????????? (不定長度)
posted on 2008-09-04 14:53 死神 閱讀(1121) 評論(0) 編輯 收藏 所屬分類: 文件格式