压缩json的一些方式
有时候系统之间的交互需要传递报文,但是报文的量有时候是巨大的,会占用很大的贷款,
或者有时候是通过加密进行传递比如:RSA非对称加密,如果这样的话,解密方就会花费很多的时间进行解密。因为RSA加密安全性很高,但是其性能不是很好。
所以可以在进行数据传递的时候先进行一遍的json压缩,然后再经过RSA加解密就会快很多。
然后这次才用的是:
Deflater & Inflater
Deflater 是同时使用了LZ77算法与哈夫曼编码的一个无损数据压缩算法。
我们可以使用 JDK自带的提供的 Deflater 和 Inflater 类对 json 进行压缩和解压缩:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // 压缩 public static String zipString(String unzip) { Deflater deflater = new Deflater( 9 ); // 0 ~ 9 压缩等级 低到高 deflater.setInput(unzip.getBytes()); deflater.finish(); final byte [] bytes = new byte [ 256 ]; ByteArrayOutputStream outputStream = new ByteArrayOutputStream( 256 ); while (!deflater.finished()) { int length = deflater.deflate(bytes); outputStream.write(bytes, 0 , length); } deflater.end(); return new sun.misc.BASE64Encoder().encodeBuffer(outputStream.toByteArray()); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 解压缩 @Nullable public static String unzipString(String zip) { byte [] decode = new sun.misc.BASE64Decoder().decodeBuffer(zip); Inflater inflater = new Inflater(); inflater.setInput(decode); final byte [] bytes = new byte [ 256 ]; ByteArrayOutputStream outputStream = new ByteArrayOutputStream( 256 ); try { while (!inflater.finished()) { int length = inflater.inflate(bytes); outputStream.write(bytes, 0 , length); } } catch (DataFormatException e) { e.printStackTrace(); return null ; } finally { inflater.end(); } return outputStream.toString(); } |
上面的压缩有个不足之处就是,压缩以后的流文件含有换行符。压缩率还是相当的高的,自己试验了一个50K左右的json报文,压缩之后大概只有2.5K左右。
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架