Tuesday, August 18, 2015

JAVA I/O 8.18



==================2015/8/18==========================
压缩
         压缩类属于InputStreamOutputStream继承层次结构的一部分。因为压缩类库是按字节方式而不是字符方式处理的。
压缩类
功能
DeflaterOutputStream
压缩类的基类
ZipOutputStream
(一个DeflaterOutputStream)用于将数据压缩成Zip文件格式
GZIPOutputStream
(一个DeflaterOutputStream)用于将数据压缩成GZip文件格式
InflaterInputStream
解压缩类的基类
ZipInputStream
(一个InflaterInputStream)用于解压缩Zip文件格式的数据
GZIPInputStream
(一个InflaterInputStream)用于解压缩GZip文件格式的数据
CheckedInputStream
GetCheckSum()为任何InputStream产生校验和(不仅是解压缩)
CheckedOutputStream
GetCheckSum()为任何OutputStream产生校验和(不仅是压缩)

1.对单个数据流(而不是一系列互异数据)进行压缩,GZIP是比较合适的选择。它的使用非常直观——直接将输出流封装成GZIPOutputStreamZipOutputStream,并将输入流封装成GZIPInputStreamZipInputStream即可。
BufferedReader in = new BufferedReader(new FileReader(args[0]));
BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream("test.gz")));
System.out.println("Writing file");
int c;
while ((c = in.read()) != -1) {
    out.write(c);
}
in.close();
out.close();

WinZip校验功能,该功能主要是用于直接将某个ZIP压缩包解压、释放到用户指定的临时文件夹中,然后再自动在Windows9X的开始菜单中为这些释放后的文件建立对应的快捷方式,这样用户就可以方便的对压缩包中的文件进行安装、运行、调试了。

2.Checksum有两个类型:Adler32(快一些) CRC32(慢一些,当更准确)。
3.对于每一个要加入压缩档案的文件,都必须调用putNextEntry(),并将其传递给一个ZipEntry对象。ZipEntry对象包含了一个功能很广泛的接口,允许你获取和设置Zip文件内该特定项上所有可利用的数据:名字、压缩的和未压缩的文件大小、日期、CRC校验和、额外字段数据、注释、压缩方法以及它是否是一个目录入口等等。
4.解压缩文件有两个方法,a. ZipInputStream提供了一个getNextEntry()方法返回下一个ZipEntry; b.利用ZipFile对象读取文件,该对象有一个entries()方法用来向ZipEntries返回一个Enumeration(枚举)

5.Java档案文件
         Zip格式也被应用于JARJava Archive, Java档案文件)文件格式中。JAR文件在涉及因特网应用的时候非常有用。
         如果不采用JAR文件,Web浏览器在下载构成一个应用的所有文件时必须重复多次请求Web服务器;而且所有这些文件都是未经压缩的。如果将所有这些文件合并到一个JAR文件中,只需向远程服务器发出一次请求即可。同时,由于采用了压缩技术,可以使传输时间更短。另外,处于安全的考虑,JAR文件中的每个条目都可以加上数字化签名。
         SunJDK自带的jar程序可根据我们的选择自动压缩文件。可以用命令行的形式调用它,如下:
jar [options] destination [manifest] inputfile(s)
         其中,options只是一个字母集合,不必输入“-”或其它标识符。











Option
Description
c
Creates a new jar file.
t
Updates an existing jar file.
x
Extracts files from an existing jar file.
t
Lists the contents of a jar file
f
Indicates that the jar file is specified as an argument. You almost always want to use this option.
v
Verbose output. This option tells the jar command to display extra information while it works.
O
Doesn’t compress files when it adds them to the archive. This option isn’t used much.
m
Specifies that a manifest file is provided. It’s listed as the next argument following the jar file.
M
Specifies that a manifest file should not be added to the archive. This option is rarely used.

使用示例如:
创建一个名为myJarFile.jarJAR文件,该文件包含当前目录中的所有类文件,以及自动产生的清单文件:
jar cf myJarFile.jar *.class
添加一个名为myManifestFile.mf的用户自建清单文件:
jar cf myJarFile.jar myManifestFile.mf *.class
产生myJarFile.jar内所有文件的一个目录表:
jar tf myJarFile.jar

No comments:

Post a Comment