java读取压缩包输入流直接解压读取文件内容

压缩包传输到客户端后如果先保存本地再解压,从效率和设计上并不合理,不如直接解压后读取压缩包内文件内容,不废话直接上代码。

package com.test.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class TestZip {
    
    public static void main(String[] args) {
        String str ="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";
        byte[] decode = Base64.getDecoder().decode(str);
        ByteArrayInputStream is = new ByteArrayInputStream(decode);
        unzipDirect(is);
    }

    /**
     * 直接解压压缩包输入流,读取压缩包内文档内容
     * @param is
     */
    public static void unzipDirect(InputStream is) {
        ZipInputStream zis = null;
        ByteArrayOutputStream out = null;
        try {
            zis = new ZipInputStream(is);
            ZipEntry en = null;
            byte [] b = null;
            while( (en = zis.getNextEntry()) != null){
                if(!en.isDirectory()) {
                    System.out.println("文件名:" + en.getName());
                    out = new ByteArrayOutputStream();
                    int length = 0;
                    b = new byte[1024];
                    while((length = zis.read(b)) > -1) {
                        out.write(b, 0, length);
                    }
                    out.flush();
                    zis.closeEntry();
                    String unzipStr = out.toString();
                    System.out.println("文件内容:" + unzipStr);
                    out.close();
                }
            }
            out = null;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(zis != null) {
                    zis.close();
                }
                if(is != null) {
                    is.close();  
                }
                if(out != null) {
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值