接口实现后台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

时间: 2024-11-10 16:05:29

接口实现后台GZIP压缩,pako.js 前端解压的相关文章

Java的压缩、解压及压缩加密、解密解压 例子

为了节约带宽.加快传送速度,http协议支持gzip的压缩,但如果我们的app与后台不是通过http协议通讯的,那么压缩.解压这个流程需要自己写.下面给出compress和decompress的代码: public static byte[] compress(byte[] data) throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 压缩 GZIPOutputStream gos =

压缩壳SFX的解压

00.查壳,SFX是压缩壳 01.用7Z即可解压 02.提取后的文件 压缩壳SFX的解压

zend framework将zip格式的压缩文件导入并解压到指定文件

html代码 <pre class="php" name="code"><fieldset> <legend>批量导入学生照片</legend> <form enctype="multipart/form-data" action="/Import/importstuimg" method="post"> 导入照片压缩包文件:<input v

Linux下的压缩(zip)解压(unzip)缩命令

1.zip命令zip -r myfile.zip ./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip命令unzip -o -d /home/sunny myfile.zip把myfile.zip文件解压到 /home/sunny/-o:不提示的情况下覆盖文件:-d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下: 3.其他zip -d myfile.zip smart.txt删除压缩文件中sma

高效同步数据的方法及效率测试--边打包边压缩边传输边解压20150105

有些时候在备份或者同步有很多文件的大目录时(比如几个GB或者几十个GB的数据库目录.log目录),直接scp的话花费的时间较长,虽然可以采用先压缩再传输再解压的方法,传输的数据量确实减少了,但压缩和解压也会耗费很多的时间,总体效果也不令人满意,昨天晚上突发奇想,由于之前做过流媒体视频点播的项目的经验,如果能像看高清视频一样只需要下载完视频文件的metadata头就可以实现边下载边播放,即渐进式下载(http://baike.baidu.com/link?url=fTWQYBTqQr1BisysC

tar的打包-压缩与解压缩,并解压到指定的目录

tar在linux上是常用的打包.压缩.加压缩工具,他的参数很多,折里仅仅列举常用的压缩与解压缩参数 参数: -c :create 建立压缩档案的参数:-x : 解压缩压缩档案的参数:-z : 是否需用用gzip压缩:-v: 压缩的过程中显示档案:-f: 置顶文档名,在f后面立即接文件名,不能再加参数 举例: 一,将整个/home/www/images 目录下的文件全部打包为 /home/www/images.tar[[email protected] ~]# tar -cvf /home/ww

5、分区格式化、压缩、挂载、解压 学习笔记

文件系统: MBR: Master Boot Record, 主引导记录(512bytes存在第0扇区) 512bytes: bootloader: 446bytes fat: 64bytes, 16bytes, 4 MBR有效性标记:5A 至多4主分区,可以3主分区1扩展分区(扩展分区引用额外的分区表),要使用扩展分区需在扩展分区中再另行划分逻辑分区 硬盘接口: IDE(ATA).SCSI.SATA(6Gbps).SAS(6Gbps) fdisk /dev/sda d: 删除 l: 列出内核支

linux下压缩成zip文件解压zip文件

linux  zip命令的基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] linux  zip命令参数列表: -a     将文件转成ASCII模式 -F     尝试修复损坏的压缩文件     -h     显示帮助界面 -m     将文件压缩之后,删除源文件 -n 特定字符串    不压缩具有特定字尾字符串的文件 -o     将压缩文件内的所有文件的最新变动时间设为压缩时候的时间 -q     安静模式,在压缩的时候不显示指令的执行过程 -r     将指定的目录

js前端--解决非IE浏览器事件绑定的一些问题

一.问题所在 现代绑定中W3C使用的是:addEventListener和removeEventListener.IE使用的是attachEvent和detachEvent.我们知道IE的这两个问题多多,并且伴随内存泄漏.所以,解决这些问题非常有必要. 那么我们希望解决非IE浏览器事件绑定哪些问题呢? 1.支持同一元素的同一事件句柄可以绑定多个监听函数: 2.如果在同一元素的同一事件句柄上多次注册同一函数,那么第一次注册后的所有注册都被忽略: 3.函数体内的this指向的应当是正在处理事件的节点