forked from github/dataease
124 lines
3.4 KiB
Java
124 lines
3.4 KiB
Java
package io.dataease.commons.utils;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.util.zip.*;
|
|
|
|
public class CompressUtils {
|
|
|
|
/***
|
|
* Zip压缩
|
|
*
|
|
* @param data 待压缩数据
|
|
* @return 压缩后数据
|
|
*/
|
|
public static Object zip(Object data) {
|
|
if (!(data instanceof byte[])) {
|
|
return data;
|
|
}
|
|
|
|
byte[] temp = (byte[]) data;
|
|
byte[] b = (byte[]) data;
|
|
try {
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
ZipOutputStream zip = new ZipOutputStream(bos);
|
|
ZipEntry entry = new ZipEntry("zip");
|
|
entry.setSize(temp.length);
|
|
zip.putNextEntry(entry);
|
|
zip.write(temp);
|
|
zip.closeEntry();
|
|
zip.close();
|
|
b = bos.toByteArray();
|
|
bos.close();
|
|
} catch (Exception ex) {
|
|
LogUtil.error(ex);
|
|
}
|
|
|
|
return b;
|
|
}
|
|
|
|
/***
|
|
* Zip解压
|
|
*
|
|
* @param data 待解压数据
|
|
* @return 解压后数据
|
|
*/
|
|
public static Object unzip(Object data) {
|
|
if (!(data instanceof byte[])) {
|
|
return data;
|
|
}
|
|
byte[] temp = (byte[]) data;
|
|
byte[] b = (byte[]) data;
|
|
try {
|
|
ByteArrayInputStream bis = new ByteArrayInputStream(temp);
|
|
ZipInputStream zip = new ZipInputStream(bis);
|
|
while (zip.getNextEntry() != null) {
|
|
byte[] buf = new byte[1024];
|
|
int num;
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
while ((num = zip.read(buf, 0, buf.length)) != -1) {
|
|
baos.write(buf, 0, num);
|
|
}
|
|
b = baos.toByteArray();
|
|
baos.flush();
|
|
baos.close();
|
|
}
|
|
zip.close();
|
|
bis.close();
|
|
} catch (Exception ex) {
|
|
LogUtil.error(ex);
|
|
}
|
|
return b;
|
|
}
|
|
|
|
/**
|
|
* GZip压缩
|
|
*
|
|
* @param data 待压缩数据
|
|
* @return 压缩后数
|
|
*/
|
|
public static Object compress(Object data) {
|
|
if (!(data instanceof byte[])) {
|
|
return data;
|
|
}
|
|
byte[] bytes = (byte[]) data;
|
|
try (ByteArrayOutputStream obj = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(obj)) {
|
|
gzip.write(bytes);
|
|
gzip.flush();
|
|
gzip.finish();
|
|
return obj.toByteArray();
|
|
} catch (Exception e) {
|
|
LogUtil.error(e.getMessage(), e);
|
|
return data;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* GZip解压
|
|
*
|
|
* @param data 待解压数据
|
|
* @return 解压后数据
|
|
*/
|
|
public static Object decompress(Object data) {
|
|
if (!(data instanceof byte[])) {
|
|
return data;
|
|
}
|
|
byte[] bytes = (byte[]) data;
|
|
if (bytes.length == 0) {
|
|
return bytes;
|
|
}
|
|
try (GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes)); ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
|
|
byte[] buffer = new byte[8192];
|
|
int len;
|
|
while ((len = gis.read(buffer)) > 0) {
|
|
baos.write(buffer, 0, len);
|
|
}
|
|
baos.flush();
|
|
return baos.toByteArray();
|
|
} catch (Exception e) {
|
|
LogUtil.error(e.getMessage(), e);
|
|
return data;
|
|
}
|
|
}
|
|
}
|