zip it
This commit is contained in:
parent
2d5a96f16e
commit
03d97ca4c2
@ -0,0 +1,100 @@
|
||||
package com.xhpc.common;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Base64;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
public class Compressor {
|
||||
|
||||
|
||||
/**
|
||||
* 使用gzip压缩字符串
|
||||
*/
|
||||
public static String compress(String str) {
|
||||
|
||||
if (str == null || str.length() == 0) {
|
||||
return str;
|
||||
}
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
GZIPOutputStream gzip = null;
|
||||
try {
|
||||
gzip = new GZIPOutputStream(out);
|
||||
gzip.write(str.getBytes());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (gzip != null) {
|
||||
try {
|
||||
gzip.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return new String(Base64.getEncoder().encode(out.toByteArray()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用gzip解压缩
|
||||
*/
|
||||
public static String uncompress(String compressedStr) {
|
||||
|
||||
if (compressedStr == null || compressedStr.length() == 0) {
|
||||
return compressedStr;
|
||||
}
|
||||
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
ByteArrayInputStream in = null;
|
||||
GZIPInputStream ginzip = null;
|
||||
byte[] compressed = null;
|
||||
String decompressed = null;
|
||||
try {
|
||||
compressed = Base64.getDecoder().decode(compressedStr);
|
||||
in = new ByteArrayInputStream(compressed);
|
||||
ginzip = new GZIPInputStream(in);
|
||||
byte[] buffer = new byte[1024];
|
||||
int offset = -1;
|
||||
while ((offset = ginzip.read(buffer)) != -1) {
|
||||
out.write(buffer, 0, offset);
|
||||
}
|
||||
decompressed = out.toString();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (ginzip != null) {
|
||||
try {
|
||||
ginzip.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
if (in != null) {
|
||||
try {
|
||||
in.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
if (out != null) {
|
||||
try {
|
||||
out.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
return decompressed;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
String compress = compress("2020年9月8日 — 背景Redis缓存的字符串过大时会有问题。不超过10KB最好,最大不能超过1MB。有几个热点配置缓存,5分钟命中一次,大小在5KB到6MB" +
|
||||
"不等,因此需要压缩。");
|
||||
System.out.println(compress);
|
||||
System.out.println(compress.length());
|
||||
String uncompress = uncompress(compress);
|
||||
System.out.println(uncompress);
|
||||
System.out.println(uncompress.length());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user