Java字符串的压缩与解压缩的两种⽅法应⽤场景
当字符串太长,
需要将字符串值存⼊数据库时,如果字段长度不够,则会出现插⼊失败;
或者需要进⾏Http传输时,由于参数长度过长造成http传输失败等。
字符串压缩与解压⽅法
⽅法⼀:⽤ Java8中的gzip
/**
* 使⽤gzip压缩字符串
* @param str 要压缩的字符串
* @return
*/
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.Bytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (gzip != null) {
try {
gzip.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return new sun.misc.BASE64Encoder().ByteArray());
}
/
**
* 使⽤gzip解压缩
* @param compressedStr 压缩字符串
* @return
*/
public static String uncompress(String compressedStr) {
if (compressedStr == null) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = null;
GZIPInputStream ginzip = null;
byte[] compressed = null;
String decompressed = null;
try {
compressed = new sun.misc.BASE64Decoder().decodeBuffer(compressedStr);
in = new ByteArrayInputStream(compressed);
ginzip = new GZIPInputStream(in);
byte[] buffer = new byte[1024];
int offset = -1;
while ((offset = ad(buffer)) != -1) {
out.write(buffer, 0, offset);
}
decompressed = String();
} 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;
}
⽅法⼆:⽤dec.binary.Base64
/**
* 使⽤dec.binary.Base64压缩字符串
* @param str 要压缩的字符串
* @return
*/
public static String compress(String str) {
if (str == null || str.length() == 0) {
return str;
}
Bytes());
}
/**
* 使⽤dec.binary.Base64解压缩
* @param compressedStr 压缩字符串
* @return
*/
public static String uncompress(String compressedStr) {
if (compressedStr == null) {
return null;
}
return Base64.decodeBase64(compressedStr);
}
注意事项
在web项⽬中,服务器端将加密后的字符串返回给前端,前端再通过ajax请求将加密字符串发送给服务器端处理的时候,在http传输过程中会改变加密字符串的内容,导致服务器解压压缩字符串发⽣异常:
java.util.zip.ZipException: Not in GZIP format
解决⽅法:
在字符串压缩之后,将压缩后的字符串BASE64加密,在使⽤的时候先BASE64解密再解压即可。
字符串长度web
到此这篇关于Java字符串的压缩与解压缩的两种⽅法的⽂章就介绍到这了,更多相关Java字符串压缩内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。