用Deflater与Inflater实现字节的压缩与解压

来源:互联网 发布:淘宝秒杀优惠券 编辑:程序博客网 时间:2024/06/05 17:33
package com.yangxiutian;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.DataFormatException;import java.util.zip.Deflater;import java.util.zip.Inflater;public class ZLibUtils {/** * 用zip算法解压压缩字节 * @param zipByte 输入的压缩字节 * @return解压好的解压字节 * @throws IOException */public static byte[] decompress(byte[] zipByte) throws IOException {ByteArrayOutputStream aos=new ByteArrayOutputStream(); Inflater inflater=new Inflater();inflater.setInput(zipByte); byte[] buff=new byte[1024];int byteNum=0;while(!inflater.finished()){try {byteNum=inflater.inflate(buff);aos.write(buff,0,byteNum);} catch (DataFormatException e) {e.printStackTrace();}}return aos.toByteArray();}/** * 用zip算法压缩字节 * @param bytes 输入的待压缩字节 * @return压缩就绪的字节 * @throws IOException */public static byte[] compress(byte[] bytes) throws IOException {ByteArrayOutputStream aos=new ByteArrayOutputStream(); Deflater inflater=new Deflater();inflater.setInput(bytes);inflater.finish();byte[] buff=new byte[1024];int byteNum=0;while(!inflater.finished()){byteNum=inflater.deflate(buff);aos.write(buff, 0, byteNum);}return aos.toByteArray();}}

有时在内存中需要对某些数据块实现压缩与解压,ZipInputStream / ZipOutputStream的操作对象是文件,这时就需要用到Deflater / Inflater。实现代码如下: