本文主要是介绍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字符串的压缩与解压缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!