package cn.iscas.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class GzipCompressUtil {
public static void main(String[] args) {
String originalString = "这是一个很长的字符串,用于演示gzip压缩和解压缩的效果。";
String compress = compress(originalString);
String decompress = decompress(compress);
}
public static String compress(String originalString) {
// 压缩字符串
byte[] compressedData = compressString(originalString);
// 转换为Base64字符串
String compressedBase64String = Base64.getEncoder().encodeToString(compressedData);
// System.out.println("原始字符串长度: " + originalString.getBytes(StandardCharsets.UTF_8).length);
// System.out.println("压缩后数据长度: " + compressedData.length);
// System.out.println("Base64编码后的字符串长度: " + compressedBase64String.length());
return compressedBase64String;
}
public static String decompress(String compressedBase64String){
// 解压缩Base64字符串
byte[] decompressedData = decompressString(compressedBase64String);
// 转换为字符串
String decompressedString = new String(decompressedData, StandardCharsets.UTF_8);
// System.out.println("解压缩前的字符串: " + compressedBase64String);
// System.out.println("解压缩后的字符串: " + decompressedString);
return decompressedString;
}
private static byte[] compressString(String str) {
if (str == null || str.length() == 0) {
return new byte[0];
}
ByteArrayOutputStream obj = new ByteArrayOutputStream();
GZIPOutputStream gzip;
try {
gzip = new GZIPOutputStream(obj);
gzip.write(str.getBytes(StandardCharsets.UTF_8));
gzip.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return obj.toByteArray();
}
private static byte[] decompressString(String base64String) {
if (base64String == null || base64String.isEmpty()) {
return new byte[0];
}
byte[] compressedData = Base64.getDecoder().decode(base64String);
ByteArrayInputStream bis = new ByteArrayInputStream(compressedData);
GZIPInputStream gis;
try {
gis = new GZIPInputStream(bis);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = gis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
gis.close();
bos.close();
return bos.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
JAVA实现字符串gzip压缩和解压缩
最新推荐文章于 2024-08-07 16:52:12 发布