Gzip压缩字符串长度

844 阅读1分钟

import pako from 'pako'

// 解压
function unzip(b64Data: any){
	// 字符串转base64
	let strData = atob(b64Data)
	// 将二进制字符串转换为字符数数组
	const charData = strData.split('').map(function(x){return x.charCodeAt(0)})
	// 将数字数组转换为字节数组
	const binData = new Uint8Array(charData);
	// 解压
	const data: number[] = pako.inflate(binData);
	// 将gunzipped byteArray转换回ascii字符串:
	strData = String.fromCharCode.apply(null, Array.from(new Uint16Array(data)))
	return strData;
}
 
// 压缩
function zip(str: any){
	const binaryString = pako.gzip(str, { to: 'string' });
	// 字符串转base64
	return btoa(binaryString);
}

需要注意的是,字符串压缩后的长度和压缩前的长度比是一个曲线,原文越长则压缩收益越高,原文越短则有可能出现负收益