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

Posted renjiaqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口实现后台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文件的邮箱留言

以上是关于接口实现后台GZIP压缩,pako.js 前端解压的主要内容,如果未能解决你的问题,请参考以下文章

TS/JS 使用pako.js 压缩字符串和二进制

JS.压缩&解压缩

JavaScript文件上传和下载

Swoole WebSoctet 使用 zlib 压缩之 PHP 与 pako.js

前端代码gzip压缩

C#实现通过Gzip来对数据进行压缩和解压