用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java压缩与解压

2018-03-11 作者:低调的小飞举报

[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);  
    }  
}    


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。