//zip压缩
func (this *UserController) DoZlibCompress(src []byte) []byte {
var in bytes.Buffer
w := zlib.NewWriter(&in)
w.Write(src)
w.Close()
return in.Bytes()
}
//zip解压
func (this *UserController) DoZlibUnCompress(compressSrc []byte) []byte {
b := bytes.NewReader(compressSrc)
var out bytes.Buffer
r, _ := zlib.NewReader(b)
io.Copy(&out, r)
return out.Bytes()
}
//gzip压缩
func (this *UserController) DoGzlibCompress(src []byte) []byte {
var in bytes.Buffer
w := gzip.NewWriter(&in)
w.Write(src)
w.Close()
return in.Bytes()
}
//gzip解压
func (this *UserController) DoGzlibUnCompress(compressSrc []byte) []byte {
b := bytes.NewReader(compressSrc)
var out bytes.Buffer
r, _ := gzip.NewReader(b)
io.Copy(&out, r)
return out.Bytes()
}
func (this *UserController) test() {
var jsonBuf = []byte(`hello world`)
//gzip
gbuf := this.DoGzlibCompress(jsonBuf)
gstr := base64.StdEncoding.EncodeToString(gbuf)
logger.Debug("gzip =%s", gstr)
rBuf := this.DoGzlibUnCompress(gbuf)
logger.Debug("\nrBuf = %s\n", string(rBuf))
//zip
buf := this.DoZlibCompress(jsonBuf)
str := base64.StdEncoding.EncodeToString(buf)
logger.Debug("zip =%s", str)
}
前端
unzip(b64Data){
var strData = atob(b64Data);
// Convert binary string to character-number array
var charData = strData.split('').map(function(x){return x.charCodeAt(0);});
// Turn number array into byte-array
var binData = new Uint8Array(charData);
// // unzip
var data = pako.inflate(binData);
// Convert gunzipped byteArray back to ascii string:
strData = String.fromCharCode.apply(null, new Uint16Array(data));
return strData;
},
zip(str){
var binaryString = pako.gzip(str, { to: 'string' });
return btoa(binaryString);
},
test()
{
var ticketData = 'hello world';
var data = this.zip(ticketData);
cc.log("zipped:%s",data);
var s = this.unzip(data);
cc.log("unzipped:%s",s);
},
不完全一样也没关系的,也可以解包
test()
{
var ticketData = 'helloWorld';
var ziptData = 'H4sIAAAAAAAA/8pIzcnJVwjPL8pJAQQAAP//gT6LzAsAAAA=';
var data = this.zip(ticketData);
cc.log("zipped:%s",data);
var s = this.unzip(ziptData);
cc.log("unzipped:%s",s);
},
参考资料
用golang后端,发现不能正确接收pako.gzip后的数据
https://www.codercto.com/a/44090.html