文件头 |
|
压缩数据描述 |
|
字段名称 |
占用位数(字节) |
字段名称 |
占用位数(字节) |
文件头描述 |
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
。