什么是deflate?
DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
它最初是由Phil Katz为他的PKZIP归档工具第二版所定义的,后来定义在RFC 1951规范中。人们普遍认为DEFLATE不受任何专利所制约,并且在LZW(GIF文件格式使用)相关的专利失效之前,这种格式除了在ZIP文件格式中得到应用之外也在gzip压缩文件以及PNG图像文件中得到了应用。DEFLATE压缩与解压的源代码可以在自由、通用的压缩库zlib上找到。更高压缩率的DEFLATE是7-zip所实现的。AdvanceCOMP也使用这种实现,它可以对gzip、PNG、MNG以及ZIP文件进行压缩从而得到比zlib更小的文件大小。在Ken Silverman的KZIP与PNGOUT中使用了一种更加高效同时要求更多用户输入的DEFLATE程序。
实现代码
/**
* 解压deflate格式文件
* @param src 源文件
* @param target 目标文件
*/
private static void inflate(File src, File target){
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
InflaterOutputStream inflaterOutputStream = null;
try {
fileInputStream = new FileInputStream(src);
fileOutputStream = new FileOutputStream(target);
inflaterOutputStream = new InflaterOutputStream(fileOutputStream);
byte[] b = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(b)) != -1) {
inflaterOutputStream.write(b, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fileInputStream.close();
inflaterOutputStream.close();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 使用deflate算法压缩文件
* @param src 源文件
* @param target 目标文件
*/
public static void deflate(File src,File target) {
FileInputStream fileInputStream;
FileOutputStream fileOutputStream;
DeflaterOutputStream deflaterOutputStream;
try {
fileInputStream = new FileInputStream(src);
fileOutputStream = new FileOutputStream(target);
deflaterOutputStream = new DeflaterOutputStream(fileOutputStream,new Deflater(8));
byte[] b = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(b)) != -1) {
deflaterOutputStream.write(b, 0, len);
}
fileInputStream.close();
deflaterOutputStream.close();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
分享一款java开发的deflate格式文件处理工具