import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.util.zip.GZIPInputStream;

import java.util.zip.GZIPOutputStream;

public class GZIPUtils {

/**

* 字符串的压缩

*

* @param str

* 待压缩的字符串

* @return 返回压缩后的字符串

* @throws IOException

*/

public static String compress(String str) throws IOException {

if (null == str || str.length() <= 0) {

return null;

}

// 创建一个新的 byte 数组输出流

ByteArrayOutputStream out = new ByteArrayOutputStream();

// 使用默认缓冲区大小创建新的输出流

GZIPOutputStream gzip = new GZIPOutputStream(out);

// 将 b.length 个字节写入此输出流

gzip.write(str.getBytes("UTF-8"));

gzip.close();

// 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串

return out.toString("ISO-8859-1");

}

/**

* 字符串的解压

*

* @param b

* 对字符串解压

* @return 返回解压缩后的字符串

* @throws IOException

*/

public static String unCompress(byte[] b) {

try {

if (null == b || b.length <= 0) {

return null;

}

// 创建一个新的 byte 数组输出流

ByteArrayOutputStream out = new ByteArrayOutputStream();

// 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组

ByteArrayInputStream in;

in = new ByteArrayInputStream(b);

// 使用默认缓冲区大小创建新的输入流

GZIPInputStream gzip = new GZIPInputStream(in);

byte[] buffer = new byte[256];

int n = 0;

while ((n = gzip.read(buffer)) >= 0) {// 将未压缩数据读入字节数组

// 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte数组输出流

out.write(buffer, 0, n);

}

// 使用指定的 charsetName,通过解码字节将缓冲区内容转换为字符串

return out.toString("UTF-8");

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

String encodeStr = URLEncoder.encode(JSON.toJSONString(buildMenuTree(menus)), "UTF-8");

encodeStr = Base64.encodeBase64String(encodeStr.getBytes("UTF-8"));

String menuCompressStr = GZIPUtils.compress(encodeStr);

前端js

//data为后台返回的值

JSON.parse(unzip(data));

// 解压

function unzip(key) {

var charData = [];

var keyArray = key.split(‘‘);

for(var i = 0; i < keyArray.length; i++){

var item = keyArray[i];

charData.push(item.charCodeAt(0));

}

// var binData = new Uint8Array(charData);

// console.log(‘Uint8Array:‘ + binData);

// 解压

// var data = pako.inflate(binData);

var data = pako.inflate(charData);

// 将GunZip ByTAREAR转换回ASCII字符串

// key = String.fromCharCode.apply(null, new Uint16Array(data));

key = String.fromCharCode.apply(null, data);

return decodeURIComponent(Base64.decode(key));

}

// 压缩

function zip(str) {

//escape(str) --->压缩前编码,防止中午乱码

var binaryString = pako.gzip(escape(str), { to: ‘string‘ });

return binaryString;

}

需要pako.min.js文件的邮箱留言

原文:https://www.cnblogs.com/renjiaqi/p/11634691.html

java 前后端解压缩字符串_接口实现后台GZIP压缩,pako.js 前端解压相关推荐

  1. java字符串压缩js解压_接口实现后台GZIP压缩,pako.js 前端解压

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  2. pako java_接口实现后台GZIP压缩,pako.js 前端解压

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  3. java前后端数据交互_前后端数据交互(示例代码)

    function ajax(option) { function objtostring(obj){ if(typeof obj==='object' && !Array.isArra ...

  4. 微信公众号支付java前后端分离开发

    微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付,支付宝微信都做了,这里就介绍一下微信公众号支付,这个公众号支付需要配置的东西太多了,官方文档 ...

  5. Java前后端分离(Ajax和Json)

    为什么要前后端分离? 在以前的学习代码中,可以看出来我们在jsp页面页面上也通过EL表达式和jstl写了很多的java程序,这实际上在前端的页面中混入了很多后端的逻辑,这就是传统的web开发.在传统的 ...

  6. 解决java前后端分离端口跨域问题

    解决java前后端分离端口跨域问题 参考文章: (1)解决java前后端分离端口跨域问题 (2)https://www.cnblogs.com/mollie-x/p/10449686.html 备忘一 ...

  7. 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...

  8. 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  9. 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...

最新文章

  1. 用 Python 写 3D 游戏,太赞了
  2. 关于js中cookie的认识
  3. zabbix 监控端口,其他端口和此端口类似
  4. 利用Minhash和LSH寻找相似的集合
  5. 【原创】设置头文件路径, gcc -I 选项写法
  6. jQuery EasyUI datagrid本地分页
  7. Leetcode-1155 Number of Dice Rolls With Target Sum(掷骰子的N种方法)
  8. 公共技术点之 Android 动画基础
  9. 电脑没有摄相头,使用安卓或IOS旧手机替代摄相头
  10. SEO网站收录情况分析查询方法(小技巧Tips)
  11. 手机支付宝,微信的请求userAgent
  12. c 语言中析构函数,全面解析C++中的析构函数
  13. 美国硕士计算机机械专业排名,工科“三巨头”之一-机械工程的美国硕士申请全解答...
  14. Android车载蓝牙相关开发2:蓝牙总入口BluetoothAdapter
  15. Day13_06_openssl 对称加密算法enc命令详解
  16. 图像处理:均值滤波算法
  17. 圣天诺LDK能做什么?
  18. CAD批量导入点的方法
  19. FWFT FIFO的读写操作
  20. STC89C52小车PWM控制直流电机详细代码

热门文章

  1. 不懂代码,文科生也能学!从零教你Python数据分析与挖掘
  2. PyTorch快餐教程2019 (2) - Multi-Head Attention
  3. [线段树][扫描线][计数] Jzoj P6297 世界第一的猛汉王
  4. 全国一等奖,H题:用电器分析识别装置
  5. win10系统网络中看不见计算机,win10系统下网上邻居看不到其他共享电脑的4个解决方法...
  6. java籍贯怎么定义,籍贯是什么意思怎么写比如(全面解说籍贯定义及其写法)...
  7. android view刷新界面,优雅地刷新RecyclerView
  8. asp.net 新建项目与新建网站区别
  9. 帆软设置删除前先确认
  10. centos7没有ens33网卡的解决方案