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
时间: 2024-11-10 16:05:29