Java字符串压缩 Java字符串的压缩与解压缩的两种方法
chen子健 人气:0想了解Java字符串的压缩与解压缩的两种方法的相关内容吗,chen子健在本文为您仔细讲解Java字符串压缩的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java字符串压缩,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解密再解压即可。
加载全部内容