JDK 自带压缩解压流

复制代码
package com.test.java.zip;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**
 * @author jrwangxin1 字节数组压缩解压工具
 */
public class ZipUtil {
    /** 压缩 */
    public static byte[] zip(byte[] source) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream);
        zipOutputStream.putNextEntry(new ZipEntry("0"));
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(zipOutputStream);
        bufferedOutputStream.write(source);
        bufferedOutputStream.close();
        return byteArrayOutputStream.toByteArray();
    }

    /** 解压 */
    public static byte[] unzip(byte[] source) throws IOException {
        ZipInputStream zipInputStream = new ZipInputStream(new ByteArrayInputStream(source));
        while (zipInputStream.getNextEntry() != null) {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            
            byte[] buffer = new byte[4096];
            int i=0;
            while ((i = zipInputStream.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer,0,i);
            }
            return byteArrayOutputStream.toByteArray();
        }
        return null;
    }

    public static void main(String[] args) throws IOException {
        // 读文件
        String file = "E:/pic.jpg";
        String outFile = "E:/picunzip.jpg";
        BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
        byte[] bytes1 = new byte[bufferedInputStream.available()];
        bufferedInputStream.read(bytes1);
        bufferedInputStream.close();
        System.out.println("压缩前大小: " + bytes1.length);
        // 压缩
        byte[] bytes2 = ZipUtil.zip(bytes1);
        System.out.println("压缩后大小: " + bytes2.length);
        // 解压
        byte[] bytes3 = ZipUtil.unzip(bytes2);
        System.out.println("unzip解压后大小: " + bytes3.length);

        // 输出到文件以便验证
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(outFile));
        bufferedOutputStream.write(bytes3);
        bufferedOutputStream.close();
    }
}
复制代码

猜你喜欢

转载自www.cnblogs.com/jpfss/p/9834676.html
今日推荐