压缩包传输到客户端后如果先保存本地再解压,从效率和设计上并不合理,不如直接解压后读取压缩包内文件内容,不废话直接上代码。
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();
}
}
}
}