170814、Java使用gzip压缩文件、还原文件

package com.rick.utils;

import java.io.*;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

/********************************************************
 *@Desc: gizp工具类
 *@Author: ZRP
 *@Date: 2017/11/9 9:31
 ********************************************************/
public class GzipUtil {

    /**
     * @Desc :  gzip压缩
     * @Author : ZRP
     * @Params: [data]
     * @Return: byte[]
     * @Date : 2017/11/9 9:43
     */
    public static byte[] gzip(byte[] data) throws Exception {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        GZIPOutputStream gzip = new GZIPOutputStream(bos);
        gzip.write(data);
        gzip.finish();
        gzip.close();
        byte[] ret = bos.toByteArray();
        bos.close();
        return ret;
    }


    /**
     * @Desc :  gzip解压缩
     * @Author : ZRP
     * @Params: [data]
     * @Return: byte[]
     * @Date : 2017/11/9 9:47
     */
    public static byte[] ungzip(byte[] data) throws Exception{
        ByteArrayInputStream bis = new ByteArrayInputStream(data);
        GZIPInputStream gzip = new GZIPInputStream(bis);
        byte[] buf = new byte[1024];
        int num = -1;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((num = gzip.read(buf, 0, buf.length)) != -1){
            bos.write(buf, 0, num);
        }
        gzip.close();
        bis.close();
        byte[] ret = bos.toByteArray();
        bos.flush();
        bos.close();
        return ret;
    }

    /**
     * 测试压缩和还原
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{
        //读取文件
        String readPath = System.getProperty("user.dir") + File.separatorChar + "sources" + File.separatorChar + "001.jpg";
        File file = new File(readPath);
        FileInputStream in = new FileInputStream(file);
        byte[] data = new byte[in.available()];
        in.read(data);
        in.close();
        System.out.println("文件原始大小:" + data.length);

        //测试压缩
        byte[] ret1 = GzipUtil.gzip(data);
        System.out.println("压缩之后大小:" + ret1.length);
        byte[] ret2 = GzipUtil.ungzip(ret1);
        System.out.println("还原之后大小:" + ret2.length);


        //写出文件
        String writePath = System.getProperty("user.dir") + File.separatorChar + "receive" +  File.separatorChar + "001.jpg";
        FileOutputStream fos = new FileOutputStream(writePath);
        fos.write(ret2);
        fos.close();

    }

}
原文地址:https://www.cnblogs.com/zrbfree/p/7807994.html