Java字符串的压缩与解压缩的两种方法
程序员文章站
2022-03-08 15:30:03
应用场景当字符串太长,需要将字符串值存入数据库时,如果字段长度不够,则会出现插入失败;或者需要进行http传输时,由于参数长度过长造成http传输失败等。字符串压缩与解压方法方法一:用 java8中的...
应用场景
当字符串太长,
需要将字符串值存入数据库时,如果字段长度不够,则会出现插入失败;
或者需要进行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字符串的压缩与解压缩的两种方法的文章就介绍到这了,更多相关java字符串压缩内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
微信小程序获取用户信息的两种方法wx.getUserInfo与open-data实例分析
-
C#实现rar压缩与解压缩文件的方法
-
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
-
SQL Server 压缩日志与减少SQL Server 文件大小的方法
-
Python实现压缩文件夹与解压缩zip文件的方法
-
Python实现多级目录压缩与解压文件的方法
-
Express与NodeJs创建服务器的两种方法
-
Linux下压缩和优化jpg与png图片的方法
-
centos的安装与配置,Linux下基本命令、权限控制,解压缩文件以及软件的安装与卸载
-
SQL SERVER 2008 r2 数据压缩的两种方法第2/2页