jszip如何解压字符串

JavaScript013

jszip如何解压字符串,第1张

其实php对gzip解压很简单,用内置的gzdecode函数就可以了,不过很可惜我配置了半天也无法支持gzdecode函数,所以只好变通一下: 复制代码 代码如下: if (!function_exists('gzdecode')) { function gzdecode ($data) { $flags = ord(substr($data, 3, 1)) $headerlen = 10 $extralen = 0 $filenamelen = 0 if ($flags &4) { $extralen = unpack('v' ,substr($data, 10, 2)) $extralen = $extralen[1] $headerlen += 2 + $extralen } if ($flags &8) // Filename $headerlen = strpos($data, chr(0), $headerlen) + 1 if ($flags &16) // Comment $headerlen = strpos($data, chr(0), $headerlen) + 1 if ($flags &2) // CRC at end of file $headerlen += 2 $unpacked = @gzinflate(substr($data, $headerlen)) if ($unpacked === FALSE) $unpacked = $data return $unpacked } } 调用方法很简单: 复制代码 代码如下: $f=@file_get_contents("") echo gzdecode($f)

因为项目需要压缩字符串和二进制,找到了pako这个库:

https://github.com/nodeca/pako

https://gitee.com/renew_old_romance/pako/tree/master

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/pako/index.d.ts

参考 Javascript 简单实现Gzip 压缩字符串 基于pako.js

因为字符串需要与后端通讯,所以使用了bota/atob进行base64编码。

关于字符串与二进制处理,可以参考 jsmpeg系列一 基础知识 字符处理 ArrayBuffer TypedArray ,其中提到了ArrayBuffer与字符串的互相转换。

ArrayBuffer转为字符串,或者字符串转为ArrayBuffer,有一个前提,即字符串的编码方法是确定的。假定字符串采用UTF-16编码(JavaScript的内部编码方式),可以自己编写转换函数。

但是,ab2str这种写法,在实际使用中,如果buf过大,会有 Maximum call stack size exceeded 堆栈溢出。

可以参考 javascript - js数组转字符串 - 在字符串和ArrayBuffers之间转换 ,改为for的写法:

public class Trans {

public void printNum(int num){

System.out.print(Thread.currentThread())//获取当前运行这个方法的类

for(int i=0i<25i++){

System.out.print(i+" ")

}

System.out.println()

}

}