Apache在Commons Compress简介和简单应用

Apache在CommonsCompress中提供了众所周知的tar、cpio、zip等压缩算法实现,其中最为丰富的当属zip实现了!

Commons Compress为压缩(GZip和BZip2)构建了压缩算法工厂类CompressorStreamFactory。通过这个类可以方便的构建GZip和BZip2的输入输出流,关键字分别为“gz”和“bzip2”。

GZip

Java代码 

//GzipCompressorInputStream

CompressorInputStream gzipIn = newCompressorStreamFactory()

.createCompressorInputStream("gz",is);

// GzipCompressorOutputStream

CompressorOutputStream gzipOut = newCompressorStreamFactory()

.createCompressorOutputStream("gz", os);

BZip2

Java代码 

// BZip2CompressorInputStream

CompressorInputStream bzip2In =new CompressorStreamFactory()

.createCompressorInputStream("bzip2", is);

//BZip2CompressorOutputStream

CompressorOutputStream bzip2Out= new CompressorStreamFactory()

.createCompressorOutputStream("bzip2", os);

下面是一个完整的通过apachecommons compress简单实现bzip2压缩的样例。

需要导入的包为:commons-compress-1.9.jar

packagetest.ffm83.commons.compress;

importjava.io.ByteArrayInputStream;

importjava.io.ByteArrayOutputStream;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.InputStream;

importjava.io.OutputStream;

importorg.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;

importorg.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream;

/* 通过apache commons compress简单实现bzip2压缩

* 部分代码来自互联网

* @author 范芳铭

* */

publicclass BZip2Utils {

public static final int BUFFER = 1024;

public static final CharSequence EXT =".bz2";

/**

* 数据压缩

*

* @param data

* @return

* @throws Exception

*/

public static byte[] compress(byte[] data)throws Exception {

ByteArrayInputStream bais = newByteArrayInputStream(data);

ByteArrayOutputStream baos = newByteArrayOutputStream();

// 压缩

compress(bais, baos);

byte[] output =baos.toByteArray();

baos.flush();

baos.close();

bais.close();

return output;

}

/**

* 文件压缩

*

* @param file

* @param delete

*            是否删除原始文件

* @throws Exception

*/

public static void compress(File file,boolean delete) throws Exception {

FileInputStream fis = newFileInputStream(file);

FileOutputStream fos = newFileOutputStream(file.getPath() + EXT);

compress(fis, fos);

fis.close();

fos.flush();

fos.close();

if (delete) {

file.delete();

}

}

/**

* 数据压缩

*

* @param is

* @param os

* @throws Exception

*/

public static void compress(InputStream is,OutputStream os)

throws Exception {

BZip2CompressorOutputStream gos = newBZip2CompressorOutputStream(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();

}

/**

* 文件压缩

*

* @param path

* @param delete

*            是否删除原始文件

* @throws Exception

*/

public static void compress(String path,boolean delete) throws Exception {

File file = new File(path);

compress(file, delete);

}

/**

* 数据解压缩

*

* @param data

* @return

* @throws Exception

*/

public static byte[] decompress(byte[]data) throws Exception {

ByteArrayInputStream bais = newByteArrayInputStream(data);

ByteArrayOutputStream baos = newByteArrayOutputStream();

// 解压缩

decompress(bais, baos);

data = baos.toByteArray();

baos.flush();

baos.close();

bais.close();

return data;

}

/**

* 文件解压缩

*

* @param file

* @param delete

*            是否删除原始文件

* @throws Exception

*/

public static void decompress(File file,boolean delete) throws Exception {

FileInputStream fis = newFileInputStream(file);

FileOutputStream fos = newFileOutputStream(file.getPath().replace(EXT,

""));

decompress(fis, fos);

fis.close();

fos.flush();

fos.close();

if (delete) {

file.delete();

}

}

/**

* 数据解压缩

*

* @param is

* @param os

* @throws Exception

*/

public static void decompress(InputStreamis, OutputStream os)

throws Exception {

BZip2CompressorInputStream gis = newBZip2CompressorInputStream(is);

int count;

byte data[] = new byte[BUFFER];

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

os.write(data, 0, count);

}

gis.close();

}

/**

* 文件解压缩

*

* @param path

* @param delete

*            是否删除原始文件

* @throws Exception

*/

public static void decompress(String path,boolean delete) throws Exception {

File file = new File(path);

decompress(file, delete);

}

public static void main(String[] args)throws Exception{

StringinputStr = "http://blog.csdn.net/ffm83/article/details/42240513";

byte[]input = inputStr.getBytes();

System.out.println("原文:\t" + inputStr);

System.out.println("长度:\t" + input.length);

byte[] data = compress(input);

System.err.println("压缩后:\t");

System.err.println("长度:\t" + data.length);

byte[] output =  decompress(data);

String outputStr = newString(output);

System.err.println("解压缩后:\t" + outputStr);

System.err.println("长度:\t" + output.length);

}

}

运行结果如下:

原文:   http://blog.csdn.net/ffm83/article/details/42240513

长度:   51

压缩后:

长度:   86

解压缩后:   http://blog.csdn.net/ffm83/article/details/42240513

长度:   51

时间: 2024-10-14 18:42:33

Apache在Commons Compress简介和简单应用的相关文章

Apache commons chain简介和简单实现

apache commons chain 提供了对CoR模式的基础支持..CoR模式,是Chain of Responsebility的缩写.CommonsChain实现了Chain of Responsebility和Command模式,其中的Catalog + 配置文件的方式使得调用方和Command的实现方的耦合度大大的降低,提高了灵活性. 使用Apachecommons chain,需要将commons-chain.jar放入你的classpath,目前最新的版本是1.2. 从使用的角度

Apache commons exec 简介和简单ping命令方法调用实现

Apache commonsexec提供一些常用的方法用来执行外部进程.Apache commons exec库提供了监视狗Watchdog来设监视进程的执行超时,同时也还实现了同步和异步功能. Apache commonsexec涉及到多线程,比如新启动一个进程,Java中需要再开三个线程来处理进程的三个数据流,分别是标准输入,标准输出和错误输出. 需要使用该功能需要引入commons-exec-1.3.jar包,目前最新的版本为1.3版本. 在日常工作和生活中,我们经常需要用到网络,网络有时

Java多层目录打包和解压代码(apache commons compress, io, lang)

Java多层目录打包和解压代码(apache commons compress, io, lang) package zip;   import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil

Apache commons Proxy简介和动态代理、动态拦截器实现

Apache Commons Proxy 是Apache 的一个之项目,封装了 Java 对象代理的一些常用方法.又叫做 动态代理. 动态代理的作用非常大,在很多底层框架中都会用得到,比如struts,Spring等都用到了动态代理,它的原理很简单,就是将你要使用的类,重新生成一个子类或本类,这样框架就可以利用这个新生成的类做一些事情,比如在该类的方法前后加一些代码. 设想一下,不用修改任何已经编写好的代码,只要使用动态代理就可以灵活的加入一些东西,将来要是不喜欢了,不用也不会影响原来的代码.

apche commons项目简介

1.apche commons项目封装了日常开发中经常使用的功能,如io, String等. http://commons.apache.org/ Apache Commons项目的由三部分组成: The Commons Proper - 一个可重用的Java组件库.(已经发布过的) The Commons Sandbox - Java组件开发工作区. (正在开发的项目) The Commons Dormant - 当前处于非活动状态的组件库.(刚启动或者已经停止维护的项目) 建立和维护可重用的

NoSQL初探之人人都爱Redis:(1)Redis简介与简单安装

一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题: (1)对数据库高并发读写的需求 网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求.关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求

实时计算,流数据处理系统简介与简单分析

转自:http://www.csdn.net/article/2014-06-12/2820196-Storm 摘要:实时计算一般都是针对海量数据进行的,一般要求为秒级.实时计算主要分为两块:数据的实时入库.数据的实时计算.今天这篇文章详细介绍了实时计算,流数据处理系统简介与简单分析. 编者按:互联网领域的实时计算一般都是针对海量数据进行的,除了像非实时计算的需求(如计算结果准确)以外,实时计算最重要的一个需求是能够实时响应计算结果,一般要求为秒级.实时计算的今天,业界都没有一个准确的定义,什么

特殊权限简介(简单的理解)

特殊权限: suid:运行程序时,相应的进程的属主是程序文件自身的属主,而不是启动者. chmod u+s(u-s) file sgid:运行某个程序时,对应进程的属组是程序文件自身的属组,而不是启动者的所属的基本组.(常常与sticky一起使用,控制公共文件,组人能修改所有文件不能删除别人文件) chmod g+s(g-s) file sticky:在一个公共的目录中,每个人都可以创建文件,删除自己的文件,但不能删除别人的文件 chmod o+t filedir 特殊权限简介(简单的理解),布

Robot Framework-工具简介及简单使用

界面详解 Project.Suite页面 项目结构:整修项目中所有结构显示及相关引用文件的显示,树型结果展示.可选择针对部分TestCase进行执行 引用:添加外部引用包.资源.变量.失败帮助 参数:添加变量.数组 数据:使用TDD时,此处可添加一些测试引用数据 TestCase页面 设置区:主要用来配制此TestCase执行阶段的的操作 Documentation:说明,可添加TestCase的说明.上下文.参数说明.业务等.无内容限制 Setup:执行用例前可进行的一些设置,数据初始化.上下