java压缩文件与解压,

  java压缩文件与解压,

  00-1010 1.场景:2。压缩类:3。注:4。单元测试:

  00-1010由于数据库字段长度有限,且数据库字段的配置不能随意修改,数据库中某个字段的设置长度在设置初期可能满足需求,后期由于业务变化或业务量增加,该字段存储的数据会有所增加,可能导致数据库下降失败。基于这种场景,我们有必要对字符串进行压缩,然后丢弃,取出使用时再对数据进行解压缩。

  00-1010是用Java8中的gzip实现的。

  导入lombok . extern . SLF 4j . SLF 4j;导入org . Apache.commons . codec . binary . base64;导入Java . io . bytearray inputstream;导入Java . io . bytearrayoutputstream;导入Java . io . io exception;导入Java . nio . charset . standard charsets;导入Java . util . zip . gzipinputstream;导入Java . util . zip . gzipoutputstream;/* * *压缩字符串的工具类*/@ SLF 4j public class compress util {/* * *使用gzip压缩字符串* @param str压缩字符串* @ return compressed strings */public static String compress(String str){ if(str==null str . length()=0){ return str;} ByteArrayOutputStream out=new ByteArrayOutputStream();try(GZIPOutputStream gzip=new GZIPOutputStream(out)){ gzip . write(str . getbytes(StandardCharsets。UTF _ 8));} catch (IOException e) {log.error(字符串压缩失败str3360 {},错误消息3360 {} ,str,e . getmessage());抛出新的RuntimeException(“字符串压缩失败”);} return base64 . encode base 64 string(out . tobytearray());}/* * *用gzip解压* @param compressedStr压缩字符串* @return解压后的字符串*/public static string uncompressed(string compressed str){ if(compressed str==null compressed str . length()=0){ return compressed str;} ByteArrayOutputStream out=new ByteArrayOutputStream();ByteArrayInputStream inGZIPInputStream gzip=null字节[]已压缩;字符串解压缩;试试{ compressed=base64 . decode base 64(compressed str);in=new ByteArrayInputStream(压缩);gzip=new GZIPInputStream(in);byte[] buffer=新字节[1024];int偏移量;while ((offset=gzip.read(buffer))!=-1) { out.write(buffer,0,offset);}解压缩=out.toString(StandardCharsets。UTF _ 8 . name());} catch (IOException e) {log.error(字符串解压缩失败,压缩str 3360 {},错误消息3360 {} ,压缩str,e . getmessage());抛出new RuntimeException(“字符串解压缩失败”);}最后{ if (gzip!=null){ try { gzip . close();} catch (IOException忽略){ } } try { out . close();} catch (IOException忽略){ } }返回解压缩的;}}

  00-1010 1) Compressiutil在压缩和解压缩过程中使用统一的字符集,防止由于压缩和解压缩过程中的字符集不同而导致结果与实际预期不一致;

  2)在web项目中,当服务器向前端返回加密字符串,前端通过ajax请求将加密字符串发送给服务器进行处理时,在http传输过程中会改变加密字符串的内容,导致服务器对字符串的非正常解压缩和压缩;

  CompressUtil在压缩和解压缩时使用Base64.encodeBase64String和Base64.decodeBase64进行编解码,可以彻底解决上述问题。

  3)如何处理压缩/解压失败?从CompressUtil工具类可以看出,如果压缩或解压缩失败,进程异常,会向调用者抛出运行时异常,便于调用者及时感知和处理;

  如何处理,要看具体的业务场景。我这边调入MQ消费者,统一在MQ中捕捉异常,所以如果压缩失败,就会重试。如果多次尝试失败,我这边会报警并打印日志,内部人员会处理。

  

目录

导入org . JUnit . test;公共类CompressUtilTest { @ Test public void test1(){ StringBuilder StringBuilder=new StringBuilder();for(int I=0;我100000;I){ stringbuilder . append( 1 );} system . out . println(stringbuilder . tostring()。length());string compress=compress util.compress(stringbuilder . tostring());system . out . println( compress= compress);system . out . println(compress . length());string uncompress=compress util . uncompress(compress);system . out . println(uncompress . length());system . out . println( uncompress= uncompress);}}测试1: 100000压缩后是180,解压后可以正常返回原字符串。

 

  测试:将压缩字符串长度更改为1000,然后重试。压缩长度为40。

  压缩比还是很高的,亲测可用!

  这就是这篇关于Java字符串压缩和解压缩的开发记录。更多相关的Java字符串压缩和解压缩内容,请搜索热门IT之前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: