import java.util.Arrays; import java.util.zip.Deflater; import java.util.zip.Inflater; import cc.zeelan.mall.common.assertion.Assert; /** * 数据压缩解压 * * @project common-utils * @fileName StringZlibUtil.java * @Description * @author light-zhang * @date 2019年5月9日 * @version 1.0.0 */ public class CompressUtil { /** * 压缩 * * @param input * @return */ public static byte[] compress(byte[] input) { try { byte[] output = new byte[Integer.sum(input.length + 10, Double.valueOf(Math.ceil(input.length * 0.25f)).intValue())]; Deflater compresser = new Deflater(9);//压缩级别 compresser.setInput(input); compresser.finish(); int compressedDataLength = compresser.deflate(output); compresser.end(); return Arrays.copyOf(output, compressedDataLength); } catch (Exception e) { Assert.RuntimeException("数据压缩失败"); } return null; } /** * 解压缩 * * @param barr 须要解压缩的字节数组 * @return * @throws Exception */ public static byte[] uncompress(byte[] barr) { try { byte[] result = new byte[2014]; Inflater inf = new Inflater(); inf.setInput(barr); int infLen = inf.inflate(result); inf.end(); return Arrays.copyOf(result, infLen); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) throws Exception { String str = "abcde|qqqqqqqqqqqqqqq|wwwwwwwwwwwwwwwwwwww"; System.out.println("压缩前 " + str.getBytes().length); byte[] def = CompressUtil.compress(str.getBytes()); System.out.println("压缩后 " + def.length); byte[] inf = CompressUtil.uncompress(def); System.out.println(new String(inf)); } }