inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish
)。
在选择压缩、打包算法的时候,不仅仅要选择算法,还需要选择用哪个实现类库,不同的实现类库实现效率不同,默认压缩比率不同。为了测试JDK、Ant、commons-compress在默认情况下的效率,设计了如下程序:
100M大小随机字符串文件生成程序:
上面的代码用于生成随机的半角字符组成的文本文件,大小为100M(1024*1024*100byte)。
性能测试程序:
测试环境:
硬件:Dell Latitude E6400(Intel Core2 Duo P8600、2G内存、7200转高速硬盘)
软件:Windows XP SP3
类库:JDK 1.6.0_11、Ant 1.7.0、commons-compress 1.0、commons-io 1.4、commons-lang 2.4
原始测试结果:
整理后测试结果:
实现类 | 原始文件大小 | 压缩后文件大小 | 压缩耗平均时 | 解压缩平均耗时 | 平均总耗时 |
CommonsZipCompress | 100 | 83.213 | 10451.55 | 6602.28 | 17053.84 |
JdkZipCompress | 100 | 83.213 | 10645.64 | 6665.09 | 17310.72 |
JdkGZIPCompress | 100 | 83.213 | 10730.44 | 6715.90 | 17446.34 |
JdkZLIBCompress | 100 | 83.213 | 11907.67 | 7120.64 | 19028.31 |
AntZipCompress | 100 | 83.213 | 10507.71 | 10176.88 | 20684.58 |
AntBzip2Compress | 100 | 82.999 | 35818.18 | 27771.20 | 63589.38 |
CommonsGZIPCompress | 100 | 82.999 | 35693.11 | 28079.96 | 63773.08 |
CommonsBZip2Compress | 100 | 83.213 | 113754.73 | 104715.95 | 218470.67 |
实现类 | 原始文件大小 | 压包后文件大小 | 打包耗平均时 | 解包平均耗时 | 平均总耗时 |
AntTarCompress | 100 | 100.010 | 5745.56 | 4462.98 | 10208.55 |
CommonsTarCompress | 100 | 100.010 | 5501.18 | 5807.38 | 11308.55 |
CommonsArCompress | 100 | 100.000 | 6104.93 | 5786.56 | 11891.49 |
CommonsCPIOCompress | 100 | 100.000 | 6636.72 | 6349.29 | 12986.01 |
结论:
1.在各自默认压缩率下,commons-compress包中zip算法具有较快的压缩速度,ant包中tar具有较快的打包速度;
2.commons-compress中的gzip压缩速度远远慢于jdk中的gzip,虽然压缩率比jdk高;
3.ant包中bzip2因为压缩正确性有问题,得到的数据不具有可比性。
4.由于被压缩文件内容由程序自动随机生成,在应用的具体环境中,压缩率、压缩时间肯定有所不同。这里提供的源码特别是测试程序经修改能够针对具体文件进行测试,可以稍微弥补一些不足。
5.因为测试目的原因,不对压缩率进行评价。