文件頭 |
|
壓縮數據描述 |
|
字段名稱 |
占用位數(字節)? |
字段名稱 |
占用位數(字節) |
文件頭描述 |
4 |
文件頭描述 |
4 |
版本類型 |
2 |
版本類型 |
2 |
通用位標志 |
2 |
通用位標志 |
2 |
壓縮方法 |
2 |
壓縮方法 |
2 |
最后修改文件時間 |
2 |
最后修改文件時間 |
2 |
最后修改文件數據 |
2 |
最后修改文件數據 |
2 |
CRC-32 |
4 |
CRC-32 |
4 |
壓縮字節數 |
4 |
壓縮字節數 |
4 |
未壓縮字節數 |
4 |
未壓縮字節數 |
4 |
文件名長度 |
2 |
文件名長度 |
2 |
附加字段長度 |
2 |
附加字段長度 |
2 |
文件名 |
可變長度 |
文件名 |
可變長度 |
附加文件名 |
可變長度 |
附加文件名 |
可變長度 |
PATH o:connecttype="rect" gradientshapeok="t" o:extrusionok="f" />SHAPE id=_x0000_i1025 style="WIDTH: 375pt; HEIGHT: 255pt" type="#_x0000_t75" alt="" />/SPAN>
ZIP
壓縮文件中目錄和文件結構描述內容如下表所示:
表
2 ZIP
格式壓縮文件目錄結構描述內容
文件構成信息描述 |
|
目錄結構信息 |
|
字段名稱 |
占用位數(字節) |
字段名稱 |
占用位數(字節) |
文件頭描述 |
4 |
目錄結束標志 |
4 |
版本類型 |
2 |
磁盤號 |
2 |
可解壓縮版本類型 |
2 |
目錄開始位置的磁盤號 |
2 |
通用位描述 |
2 |
磁盤目錄名稱 |
2 |
壓縮方法 |
2 |
目錄結構 |
2 |
最后修改文件日期 |
2 |
目錄字節數 |
4 |
最后修改文件數據 |
4 |
起始磁盤號 |
4 |
CRC-32 |
4 |
壓縮文件描述長速度 |
2 |
壓縮字節數 |
4 |
壓縮文件描述 |
可變長度 |
未壓縮字節數 |
2 |
|
|
文件名長度 |
2 |
|
|
附加字段長度 |
2 |
|
|
文件描述長度 |
2 |
|
|
起始磁盤號 |
2 |
|
|
內部文件屬性 |
4 |
|
|
外部文件屬性 |
4 |
附加文件名 |
可變 |
文件頭起始位置 |
4 |
附加文件名 |
可變 |
/SPAN>
當然,在利用
JDK API
創建壓縮數據文件時,不需要詳細了解上述
ZIP
文件定義格式。但是,
JDK
中定義的多種類型用于進行數據壓縮和管理的對象,正是根據上述格式實現數據壓縮和解壓縮的。
2 JDK API
中
ZIP
壓縮格式支持對象
ZIP
壓縮格式是在
Windows
操作系統環境中經常應用的壓縮格式。
ZIP
壓縮格式的壓縮比高、壓縮速度快,因而成為利用
Java
語言定義需要在網絡中進行數據傳輸時,數據壓縮格式的首選。
在
JDK API
的
java.util.zip
包中,定義了多種類型用于創建和讀取
zip
壓縮格式文件的對象,常用對象的定義形式和主要成員方法如下:
●ZipEntry
由于可以將多個文件壓縮到同一壓縮文件中,因此,
JDK API
中定義的
ZipEntry
對象用于標識
ZIP
壓縮文件中每個原始文件的入口。該對象的定義結構為:
對象定義結構:
java.util.zip.ZipEntry
靜態成員變量:
CENATT
、
CENATX
、
CENCRC … …
這些靜態成員變量用于定義在壓縮過程中采用的壓縮算法。
構造方法:
ZipEntry(String name)
采用字符串類型參數
name
定義壓縮文件中的原始文件入口對象實例。
ZipEntry(ZipEntry e)
采用
ZipEntry
對象類型參數
e
定義壓縮文件中的原始文件入口對象實例。
成員方法:
long getCompressedSize()
獲取壓縮文件的大小
void setCompressedSize(long csize)
設置壓縮文件的大小
int getMethod()
獲取壓縮時采用的壓縮算法
void setMethod(int method)
設置壓縮算法
long getSize()
獲取壓縮原始文件的大小
void setSize(long size)
設置壓縮原始文件的大小
long getTime()
獲取壓縮文件入口標識的定義時間
void setTime(long time)
設置壓縮文件入口標識的定義時間
boolean isDirectory()
判斷該壓縮入口標識是否代表目錄
String getName()
返回壓縮入口標識的名稱
●ZipFile
該對象用于從
ZIP
壓縮格式文件中讀取壓縮原始文件的入口。
對象定義結構:
java.util.zip.ZipFile
靜態成員變量:
CENATT
、
CENATX
、
CENCRC … …
這些靜態成員變量用于定義在壓縮過程中采用的壓縮算法。
構造方法:
ZipFile(File file)
從
File
對象代表的壓縮文件中讀取壓縮原始文件。
ZipFile(File file, int mode)
從
File
對象代表的壓縮文件中讀取壓縮原始文件,并且可以指定
ZIP
文件讀取模式。
ZipFile(String name)
打開字符串參數
name
表示的
ZIP
壓縮文件。
成員方法:
void close()
關閉被讀取的
ZIP
壓縮文件
Enumeration entries()
枚舉出
ZIP
壓縮文件中的各個壓縮原始文件入口(
Entry
)
ZipEntry getEntry(String name)
獲取壓縮文件中的各個壓縮原始文件入口
InputStream getInputStream(ZipEntry entry)
通過
ZIP
壓縮文件中的入口創建輸入流對象
String getName()
獲取
ZIP
壓縮文件的名稱
int size()
獲取壓縮文件中的入口數量
●ZipInputStream
該對象用于從
ZIP
壓縮文件中創建輸入流對象。
對象定義結構:
java.util.zip.ZipInputStream
靜態成員變量:
CENATT
、
CENATX
、
CENCRC … …
這些靜態成員變量用于定義在壓縮過程中采用的壓縮算法。
構造方法:
ZipInputStream(InputStream in)
應用輸入流對象創建從
ZIP
文件中讀取數據的輸入流對象。
成員方法:
int available()
判斷當前入口指定的壓縮原始文件中是否還有未讀數據。
void close()
關閉
ZIP
輸入流對象
void closeEntry()
關閉被讀取的
ZIP
入口,并移動到下一壓縮原始文件入口。
protectedZipEntry createZipEntry(String name)
利用指定的名稱創建
ZipEntry
對象實例。
ZipEntry getNextEntry()
將輸入流對象移動到下一入口對象。
int read(byte[] b, int off, int len)
從當前
ZipEntry
中讀取字節數組。
long skip(long n)
將輸入流指定的讀取數據位置移動
n
個字節。
●ZipOutputStream
該數據輸出流對象用于創建
ZIP
壓縮文件。
對象定義結構:
java.util.zip.ZipOutputStream
靜態成員變量:
CENATT
、
CENATX
、
CENCRC … …
這些靜態成員變量用于定義在壓縮過程中采用的壓縮算法。
構造方法:
ZipOutputStream(OutputStream out)
應用輸出流對象實例創建
ZIP
格式輸出流對象。
成員方法:
void close()
關閉
ZIP
輸出流對象。
void closeEntry()
關閉當前
ZIP
輸出流對象指定的
Entry
,并移動到下一
Entry
。
void putNextEntry(ZipEntry e)
在
ZIP
壓縮文件中創建新的壓縮原始文件入口。
void setComment(String comment)
設置壓縮文件的說明信息。
void setMethod(int method)
設置采用的壓縮算法。
void write(byte[] b, int off, int len)
通過
ZIP
輸出流對象向壓縮文件中輸出字節數組
b
。