gzip java 压缩_Java压缩技术(四) GZIP——Java原生实现

本文详细介绍了Java中使用GZIPOutputStream和GZIPInputStream实现GZIP压缩和解压缩的方法,包括数据和文件的压缩与解压,并提供了相应的代码示例。此外,还提到了在Linux环境下gzip命令的使用以及Java中GZIP与浏览器的交互。
摘要由CSDN通过智能技术生成

966903dea4bcb507358d5dcce8b912e5.gif

熟悉linux的朋友可能都用过文件压缩命令,譬如最为简单的gzip命令。

相关链接:

Java压缩技术(一) ZLib

Java压缩技术(二) ZIP压缩——Java原生实现

Java压缩技术(三) ZIP解压缩——Java原生实现

Java压缩技术(四) GZIP——Java原生实现

Java压缩技术(五) GZIP相关——浏览器解析

Java压缩技术(六) BZIP2——Commons实现

Java压缩技术(七) TAR——Commons实现

GZIP常常用在linxu环境下,是一种非常简单的压缩算法。在Java实现API中,它仅仅包含两个实现类:GZIPInputStream和GZIPOutputStream。

GZIPOutputStream类用于压缩

GZIPInputStream类用于解压缩

先说压缩实现,GZIPOutputStream只有一个方法用于压缩,就是带定长的write方法。简单调用如下文所示:

/**

* 数据压缩

*

* @param is

* @param os

* @throws Exception

*/

public static void compress(InputStream is, OutputStream os)

throws Exception {

GZIPOutputStream gos = new GZIPOutputStream(os);

int count;

byte data[] = new byte[BUFFER];

while ((count = is.read(data, 0, BUFFER)) != -1) {

gos.write(data, 0, count);

}

gos.finish();

gos.flush();

gos.close();

}

记得完成操作后,调用finish方法和flush方法!

966903dea4bcb507358d5dcce8b912e5.gif

核心的压缩实现就这么多!

966903dea4bcb507358d5dcce8b912e5.gif

对于解压缩,GZIPInputStream也对应GZIPOutputStream提供了一个带定长的read方法。简单调用如下文所示:

/**

* 数据解压缩

*

* @param is

* @param os

* @throws Exception

*/

public static void decompress(InputStream is, OutputStream os)

throws Exception {

GZIPInputStream gis = new GZIPInputStream(is);

int count;

byte data[] = new byte[BUFFER];

while ((count = gis.read(data, 0, BUFFER)) != -1) {

os.write(data, 0, count);

}

gis.close();

}

就这么简单!

966903dea4bcb507358d5dcce8b912e5.gif 核心内容完毕!

顺便补充一下,在liunx下操作gzip命令

gzip file用于压缩,如gzip a.txt将得到文件a.txt.gz,同时删除文件a.txt!。

gzip -d file.gz用于解压缩,如gzip -d a.txt.gz将得到文件a.txt,同时删除文件a.txt.gz!。

根据这些特性,我补充了相应的文件操作实现,详见下文!

966903dea4bcb507358d5dcce8b912e5.gif

完整实现:

/**

* 2010-4-13

*/

package org.zlex.commons.io;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.zip.GZIPInputStream;

import java.util.zip.GZIPOutputStream;

/**

* GZIP工具

*

* @author 梁栋

* @since 1.0

*/

public abstract class GZipUtils {

public static final int BUFFER = 1024;

public static final String EXT = ".gz";

/**

* 数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值