java压缩与解压

阅读更多
package com.dc.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

import org.apache.commons.codec.binary.Base64;

/* ******************  类说明  *********************
 * class       :  ZLibUtils
 * @author     :  ncc
 * create time :  2017-12-20 下午03:15:56
 * @version    :  1.0  
 * description :  
 * @see        :                        
 * ************************************************/   
public abstract class ZLibUtils { 
	
    /* ********************************************
     * method name   : compress 
     * description   : 压缩方法
     * @return       : byte[] 压缩后的数据
     * @param        : @param data 待压缩数据 
     * @param        : @return
     * modified      : ncc ,  2017-12-20
     * @see          : 
     * ********************************************/      
    public static byte[] compress(byte[] data) {  
        byte[] output = new byte[0];  
  
        Deflater compresser = new Deflater(Deflater.BEST_COMPRESSION);  
  
        compresser.reset();  
        compresser.setInput(data);  
        compresser.finish();  
        ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);  
        try {  
            byte[] buf = new byte[1024];  
            while (!compresser.finished()) {  
                int i = compresser.deflate(buf);  
                bos.write(buf, 0, i);  
            }  
            output = bos.toByteArray();  
        } catch (Exception e) {  
            output = data;  
            e.printStackTrace();  
        } finally {  
            try {  
                bos.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
        compresser.end();  
        return output;  
    }
    
    /* ********************************************
     * method name   : compressData 
     * description   : 字符串先压缩,后Base64编码
     * @return       : String
     * @param        : @param data
     * @param        : @return
     * @param        : @throws Exception
     * modified      : ncc ,  2017-12-20
     * @see          : 
     * ********************************************/      
    public static String compressData(String data) throws Exception{
    	return new String(getenBASE64inCodec(ZLibUtils.compress(data.getBytes())));
    }
  
    /* ********************************************
     * method name   : decompress 
     * description   : 解压缩 
     * @return       : byte[] 解压缩后的数据 
     * @param        : @param data 待解压的数据
     * @param        : @return
     * modified      : ncc ,  2017-12-20
     * @see          : 
     * ********************************************/      
    public static byte[] decompress(byte[] data) {  
        byte[] output = new byte[0];  
  
        Inflater decompresser = new Inflater();  
        decompresser.reset();  
        decompresser.setInput(data);  
  
        ByteArrayOutputStream o = new ByteArrayOutputStream(data.length);  
        try {  
            byte[] buf = new byte[1024];  
            while (!decompresser.finished()) {  
                int i = decompresser.inflate(buf);  
                o.write(buf, 0, i);  
            }  
            output = o.toByteArray();  
        } catch (Exception e) {  
            output = data;  
            e.printStackTrace();  
        } finally {  
            try {  
                o.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
  
        decompresser.end();  
        return output;  
    }  
    
    /* ********************************************
     * method name   : decompressData 
     * description   : 解压缩字符串,先进行Base64解码,在解压
     * @return       : String
     * @param        : @param encdata
     * @param        : @return
     * modified      : ncc ,  2017-12-20
     * @see          : 
     * ********************************************/      
    public static String decompressData(String encdata) {
    	return new String(ZLibUtils.decompress(getdeBASE64inCodec(encdata)));
    }
    
	/* ********************************************
	 * method name   : getenBASE64inCodec 
	 * description   : 对数组进行Base64 encode
	 * @return       : String
	 * @param        : @param b
	 * @param        : @return
	 * modified      : ncc ,  2017-12-20
	 * @see          : 
	 * ********************************************/      
	public static String getenBASE64inCodec(byte[] b) {
		if (b == null)
			return null;
		return new String((new Base64()).encode(b));
	}

	/* ********************************************
	 * method name   : getdeBASE64inCodec 
	 * description   : 对字符串进行Base64 decode
	 * @return       : byte[]
	 * @param        : @param s
	 * @param        : @return
	 * modified      : ncc ,  2017-12-20
	 * @see          : 
	 * ********************************************/      
	public static byte[] getdeBASE64inCodec(String s) {
		if (s == null)
			return null;
		return new Base64().decode(s.getBytes());
	}
    
    public static void main(String[] args) throws Exception{
		
    	StringBuilder batchContent = new StringBuilder();
		batchContent.append("start,").append("100").append("|");
		for(int i = 1; i <= 100; i ++) {
			batchContent.append("123456#").append("0000#").append("10").append("#").append("110101198001010038").append("#").append("622105010755901123").append("#");
			if (i < 100) {
				batchContent.append(",");
			} else {
				batchContent.append("|end");
			}
		}
		
		System.out.println("压缩前的长度:" + batchContent.length() + ",压缩前为:" + batchContent);
		String compressStr = ZLibUtils.compressData(batchContent.toString());
		System.out.println("压缩后的长度:" + compressStr.length() + ",压缩前为:" + compressStr);
		String decompressStr = ZLibUtils.decompressData(compressStr.toString());
		System.out.println("解压后的长度:" + decompressStr.length() + ",解压后为:" + decompressStr);
	}
}  


 依赖jar包及依赖jar包源码见附件。

 http://commons.apache.org/proper/commons-codec/download_codec.cgi

  • commons-codec-1.11-bin.zip (1.9 MB)
  • 下载次数: 0
  • commons-codec-1.11-src.zip (595.6 KB)
  • 下载次数: 0

你可能感兴趣的:(java,压缩,解压,BASE64,commons-codec源码)