java 前后端解压缩字符串_接口实现后台GZIP压缩,pako.js 前端解压
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 前端解压相关推荐
- java字符串压缩js解压_接口实现后台GZIP压缩,pako.js 前端解压
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- pako java_接口实现后台GZIP压缩,pako.js 前端解压
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- java前后端数据交互_前后端数据交互(示例代码)
function ajax(option) { function objtostring(obj){ if(typeof obj==='object' && !Array.isArra ...
- 微信公众号支付java前后端分离开发
微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付,支付宝微信都做了,这里就介绍一下微信公众号支付,这个公众号支付需要配置的东西太多了,官方文档 ...
- Java前后端分离(Ajax和Json)
为什么要前后端分离? 在以前的学习代码中,可以看出来我们在jsp页面页面上也通过EL表达式和jstl写了很多的java程序,这实际上在前端的页面中混入了很多后端的逻辑,这就是传统的web开发.在传统的 ...
- 解决java前后端分离端口跨域问题
解决java前后端分离端口跨域问题 参考文章: (1)解决java前后端分离端口跨域问题 (2)https://www.cnblogs.com/mollie-x/p/10449686.html 备忘一 ...
- 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA前后端分离健身房管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...
- 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java前后端分离健身房管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...
- 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前后端分离Erp系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技 ...
最新文章
- 用 Python 写 3D 游戏,太赞了
- 关于js中cookie的认识
- zabbix 监控端口,其他端口和此端口类似
- 利用Minhash和LSH寻找相似的集合
- 【原创】设置头文件路径, gcc -I 选项写法
- jQuery EasyUI datagrid本地分页
- Leetcode-1155 Number of Dice Rolls With Target Sum(掷骰子的N种方法)
- 公共技术点之 Android 动画基础
- 电脑没有摄相头,使用安卓或IOS旧手机替代摄相头
- SEO网站收录情况分析查询方法(小技巧Tips)
- 手机支付宝,微信的请求userAgent
- c 语言中析构函数,全面解析C++中的析构函数
- 美国硕士计算机机械专业排名,工科“三巨头”之一-机械工程的美国硕士申请全解答...
- Android车载蓝牙相关开发2:蓝牙总入口BluetoothAdapter
- Day13_06_openssl 对称加密算法enc命令详解
- 图像处理:均值滤波算法
- 圣天诺LDK能做什么?
- CAD批量导入点的方法
- FWFT FIFO的读写操作
- STC89C52小车PWM控制直流电机详细代码
热门文章
- 不懂代码,文科生也能学!从零教你Python数据分析与挖掘
- PyTorch快餐教程2019 (2) - Multi-Head Attention
- [线段树][扫描线][计数] Jzoj P6297 世界第一的猛汉王
- 全国一等奖,H题:用电器分析识别装置
- win10系统网络中看不见计算机,win10系统下网上邻居看不到其他共享电脑的4个解决方法...
- java籍贯怎么定义,籍贯是什么意思怎么写比如(全面解说籍贯定义及其写法)...
- android view刷新界面,优雅地刷新RecyclerView
- asp.net 新建项目与新建网站区别
- 帆软设置删除前先确认
- centos7没有ens33网卡的解决方案