Java字符串的压缩与解压缩的两种方法
时间:2021-09-23 08:45:07|栏目: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解密再解压即可。
上一篇:Spring Cloud Gateway 如何修改HTTP响应信息
栏 目:JAVA代码
本文标题:Java字符串的压缩与解压缩的两种方法
本文地址:http://www.codeinn.net/misctech/176833.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




