介绍
本篇文章为大家展示了Java使用GZip如何实现文件的压缩和解压,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> Maven依赖强>
org.apache.commons: commons-compress: 1.19:此依赖封装了很多压缩算法相关的工具类,提供的API还是相对比较底层,我们今天在它的基础上做进一步封装。
& lt; dependency> & lt; groupId> org.apache.commons & lt; artifactId> commons-compress & lt; version> 1.19 & lt;/version> & lt;/dependency> & lt; dependency> & lt; groupId> log4j & lt; artifactId> log4j & lt; version> 1.2.17 & lt;/dependency>
在实际应用中,对应不同需求,可能需要生成若干文件,然后将其压缩。在某些应用中,文件较小,文件数量较少且较为固定,频繁与磁盘操作,会带来不必要的效率影响。
工具类针对gz格式提供了compressByTar, decompressByTar, compressByGZip, decompressByGZip四个方法,用于处理. tar。广州格式压缩文件,代码如下:
包com.arhorchin.securitit.compress.gzip; 进口java.io.ByteArrayInputStream; 进口java.io.ByteArrayOutputStream; 进口java.io.IOException; 进口java.util.HashMap; 进口java.util.Map; 进口org.apache.commons.compress.archivers.tar.TarArchiveEntry; 进口org.apache.commons.compress.archivers.tar.TarArchiveInputStream; 进口org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; 进口org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; 进口org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; 进口org.apache.commons.io.IOUtils;/* * * @author Securitit。 * @note基于内存以ZIP算法进行压缩和解压工具类。 */公开课GZipRamUtil {/* * *使用焦油算法进行压缩。 * @param sourceFileBytesMap待压缩文件的映射集合。 * @return压缩后的焦油文件字节数组。 * @throws异常压缩过程中可能发生的异常,若发生异常,则返回的字节数组长度为0。 */公共静态byte [] compressByTar (Map<字符串,byte[]比;{tarFileBytesMap)抛出异常//变量定义。 ByteArrayOutputStream tarBaos=零; TarArchiveOutputStream tarTaos=零; TarArchiveEntry tarTae=零; 尝试{//压缩变量初始化。 tarBaos=new ByteArrayOutputStream (); tarTaos=new TarArchiveOutputStream (tarBaos);////将文件添加到焦油条目中。 (Map.Entry<字符串,byte[]比;fileEntry: tarFileBytesMap.entrySet ()) { tarTae=new TarArchiveEntry (fileEntry.getKey ()); tarTae.setName (fileEntry.getKey ()); tarTae.setSize (fileEntry.getValue () . length); tarTaos.putArchiveEntry (tarTae); tarTaos.write (fileEntry.getValue ()); tarTaos.closeArchiveEntry (); } 最后}{ 如果(tarTaos !=null) { tarTaos.close (); } 如果(null==tarBaos) { tarBaos=new ByteArrayOutputStream (); } } 返回tarBaos.toByteArray (); }/* * *使用焦油算法进行解压。 * @param sourceZipFileBytes焦油文件字节数组。 * @return解压后的文件映射集合。 * @throws异常解压过程中可能发生的异常,若发生异常,返回映射集合长度为0。 */公共静态Map<字符串,byte[]比;{decompressByTar (byte [] sourceTarFileBytes)抛出异常//变量定义。 TarArchiveEntry sourceTarTae=零; ByteArrayInputStream sourceTarBais=零; TarArchiveInputStream sourceTarTais=零; Map<字符串,byte[]比;targetFilesFolderMap=零; 尝试{//解压变量初始化。 targetFilesFolderMap=new HashMap<字符串,byte[]祝辞(); sourceTarBais=new ByteArrayInputStream (sourceTarFileBytes); sourceTarTais=new TarArchiveInputStream (sourceTarBais);//条目解压缩至地图中。 在((sourceTarTae=sourceTarTais.getNextTarEntry ()) !=null) { targetFilesFolderMap.put (sourceTarTae.getName (), IOUtils.toByteArray (sourceTarTais)); } 最后}{ 如果(sourceTarTais !=null) sourceTarTais.close (); } 返回targetFilesFolderMap; }/* * *使用GZIP算法进行压缩。 * @param sourceFileBytesMap待压缩文件的映射集合。 * @return压缩后的GZIP文件字节数组。 * @throws异常压缩过程中可能发生的异常,若发生异常,则返回的字节数组长度为0。 */公共静态byte [] compressByGZip (byte [] sourceFileBytes)抛出IOException {//变量定义。 ByteArrayOutputStream gzipBaos=零; GzipCompressorOutputStream gzipGcos=零; 尝试{//压缩变量初始化。 gzipBaos=new ByteArrayOutputStream (); gzipGcos=new GzipCompressorOutputStream (gzipBaos);//采用commons-compress提供的方式进行压缩。 gzipGcos.write (sourceFileBytes); 最后}{ 如果(gzipGcos !=null) { gzipGcos.close (); } 如果(null==gzipBaos) { gzipBaos=new ByteArrayOutputStream (); } } 返回gzipBaos.toByteArray (); }/* * *使用GZIP算法进行解压。 * @param sourceGZipFileBytes GZIP文件字节数组。 * @return解压后的文件映射集合。 * @throws异常解压过程中可能发生的异常,若发生异常,则返回的字节数组长度为0。 */公共静态byte [] decompressByGZip (byte [] sourceGZipFileBytes)抛出IOException {//变量定义。 ByteArrayOutputStream gzipBaos=零; ByteArrayInputStream sourceGZipBais=零; GzipCompressorInputStream sourceGZipGcis=零; 尝试{//解压变量初始化。 gzipBaos=new ByteArrayOutputStream (); sourceGZipBais=new ByteArrayInputStream (sourceGZipFileBytes); sourceGZipGcis=new GzipCompressorInputStream (sourceGZipBais);//采用commons-compress提供的方式进行解压。 gzipBaos.write (IOUtils.toByteArray (sourceGZipGcis)); 最后}{ 如果(sourceGZipGcis !=null) sourceGZipGcis.close (); } 返回gzipBaos.toByteArray (); } }Java使用GZip如何实现文件的压缩和解压