本文主要是介绍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.write(str.getBytes());
-
} catch (IOException e) {
-
e.printStackTrace();
-
} finally {
-
if (gzip != null) {
-
try {
-
gzip.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
return new sun.misc.BASE64Encoder().encode(out.toByteArray());
-
}
-
/**
-
* 使用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 = 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;
-
}
方法二:用org.apache.commons.codec.binary.Base64
-
/**
-
* 使用org.apache.commons.codec.binary.Base64压缩字符串
-
* @param str 要压缩的字符串
-
* @return
-
*/
-
public static String compress(String str) {
-
if (str == null || str.length() == 0) {
-
return str;
-
}
-
return Base64.encodeBase64String(str.getBytes());
-
}
-
/**
-
* 使用org.apache.commons.codec.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解密再解压即可。
这篇关于Java字符串的压缩与解压缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!