java gzip 压缩解压工具类

来源:互联网 发布:网络数据论文 编辑:程序博客网 时间:2024/06/07 15:00

因为觉得简单,本想抱着百度直接拿过来用的心态,结果发现网上的代码都转载自同一份,且埋了一个坑,你不仔细去梳理,很难发现。

mark下需要注意的两点:

1. 编码/解码,压缩/解压缩是成对出现的

    编码:   byte[] by= "xxx".getBytes("utf-8");

    解码:   String s=new String(by,"utf-8")

    下面的代码遵循逻辑如下:

     压缩方法:  先编码后压缩

     解压缩方法:   先解压缩后解码

     有童鞋想在压缩方法里返回String,结果直接new String("压缩后字符串",''utf-8),然后结果是打死都解压不出来原文。new String()是个解码的过程,压缩后得到字节数组不重新进行编码,解码有什么意义。

 2.如果要对压缩方法返回字符串可以将字节数组转为16进制字符串,但是压缩的意义就没有了,因为内容大小基本没变


直接上代码:

package com.util;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;public class GzipUtil {public static byte[] compress(String str)  {ByteArrayOutputStream out =null;GZIPOutputStream gzip=null;try{if (str == null || str.length() == 0) {return null;}out = new ByteArrayOutputStream();gzip = new GZIPOutputStream(out);gzip.write(str.getBytes("utf-8"));gzip.finish();return out.toByteArray();}catch(Exception e){e.printStackTrace();return null;}finally{try{if(out!=null){out.close();}if(gzip!=null){gzip.close();}}catch(Exception e){e.printStackTrace();}}}public static String unCompress(byte []by) {ByteArrayOutputStream out=null;GZIPInputStream gunzip=null;try{if(by==null || by.length==0){return "";}out=new ByteArrayOutputStream();gunzip= new GZIPInputStream(new ByteArrayInputStream(by));byte[] buffer = new byte[1024];int n;while ((n=gunzip.read(buffer))!=-1) {out.write(buffer, 0, n);}out.flush();return new String(out.toByteArray(),"utf-8");}catch(Exception e){e.printStackTrace();return "";}finally{try{if(out!=null){out.close();}if(gunzip!=null){gunzip.close();}}catch(Exception e){e.printStackTrace();}}}public static void main(String[] args) throws IOException {String str = "806715668,1091464537,1061006120,1142513520";System.out.println(str.getBytes("utf-8").length);System.out.println(compress(str).length);System.out.println(unCompress(compress(str)));}}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 车辆没有年检出了交通事故怎么办 跟着大货车闯了红灯怎么办 在万家金服买的电子产品坏了怎么办 汽车被油笔画了怎么办? 挂到别人车跑了怎么办 浪琴手表保修卡掉了怎么办 事故车辆维修和报废怎么办 4.2货车拉缸了怎么办 工作中与同事发生矛盾怎么办 和领导关系闹僵怎么办 内倒窗户卡住了怎么办 支付宝存在安全风险怎么办 地铁车站空调坏了怎么办 面试防汛值班发生灾情你怎么办 怀孕上班路途太远怎么办 硕士错过校招应该怎么办 收银员收多了钱怎么办 商铺贷款批不了怎么办 铁路局的门面乱收房租怎么办 酒店夜审房费多过怎么办 夜审房价录多了怎么办 做工地拿不到钱怎么办 赢了官司拿不到钱怎么办 工地上拿不到钱怎么办 做了工拿不到钱怎么办 高速公路上车没油了怎么办 高铁乘务员年龄大了怎么办 总公司跑路了分公司怎么办 坐车久了耳朵懵怎么办 过完隧道耳朵疼怎么办 护照还在大使馆需要出国怎么办 护照在大使馆不返回怎么办 美国面签迟到了怎么办 成都美签迟到了怎么办 签证电调没人接怎么办 单位没有抬头纸怎么办在职证明 出国签证无银行流水怎么办 铁路职工得癌症后工作怎么办 去泰国不会泰语和英语怎么办 签证状态一直没有更新怎么办 简理财不能身份信息确认怎么办