java的GZIP接口非常簡單,所以如果只有單個數據流需要壓縮(而不是一系列不同的數據),那麼它就可能是最適當選擇。下面是對單個文件進行壓縮的例子:
//: GZIPcompress.java
// Uses Java 1.1 GZIP compression to compress
// a file whose name is passed on the command
// line.
import java.io.*;
import java.util.zip.*;
public class GZIPcompress {
public static void main(String[] args) {
try {
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();
System.out.println("Reading file");
BufferedReader in2 =
new BufferedReader(
new InputStreamReader(
new GZIPInputStream(
new FileInputStream("test.gz"))));
String s;
while((s = in2.readLine()) != null)
System.out.println(s);
} catch(Exception e) {
e.printStackTrace();
}
}
} ///:~
壓縮類的用法非常直觀——只需將輸出流封裝到一個GZIPOutputStream或者ZipOutputStream內,並將輸入流封裝到GZIPInputStream或者ZipInputStream內即可。剩余的全部操作就是標准的IO讀寫。然而,這是一個很典型的例子,我們不得不混合使用新舊IO流:數據的輸入使用Reader類,而GZIPOutputStream的構建器只能接收一個OutputStream對象,不能接收Writer對象。