go gzip 和 js gzip 一致性问题

10 篇文章 0 订阅
//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);
    },

参考资料

nodejs的pako库中gzip的加密,go解压gzip

用golang后端,发现不能正确接收pako.gzip后的数据

https://www.codercto.com/a/44090.html

Golang gzip压缩的一个问题

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Golang 中,你可以使用 `compress/gzip` 包来进行 gzip 压缩和解压缩操作。下面是一个简单的示例: ```go package main import ( "compress/gzip" "fmt" "io" "os" ) func main() { // 压缩文件 compressFile("input.txt", "output.txt.gz") // 解压文件 decompressFile("output.txt.gz", "output.txt") } // 压缩文件 func compressFile(inputFile, outputFile string) { // 打开输入文件 input, err := os.Open(inputFile) if err != nil { fmt.Println(err) return } defer input.Close() // 创建输出文件 output, err := os.Create(outputFile) if err != nil { fmt.Println(err) return } defer output.Close() // 创建 gzip writer gzipWriter := gzip.NewWriter(output) defer gzipWriter.Close() // 复制输入文件内容到 gzip writer _, err = io.Copy(gzipWriter, input) if err != nil { fmt.Println(err) return } fmt.Println("文件压缩完成") } // 解压文件 func decompressFile(inputFile, outputFile string) { // 打开输入文件 input, err := os.Open(inputFile) if err != nil { fmt.Println(err) return } defer input.Close() // 创建输出文件 output, err := os.Create(outputFile) if err != nil { fmt.Println(err) return } defer output.Close() // 创建 gzip reader gzipReader, err := gzip.NewReader(input) if err != nil { fmt.Println(err) return } defer gzipReader.Close() // 复制 gzip reader 内容到输出文件 _, err = io.Copy(output, gzipReader) if err != nil { fmt.Println(err) return } fmt.Println("文件解压缩完成") } ``` 在上面的示例中,`compressFile` 函数用于压缩一个输入文件,并将结果保存到输出文件中。`decompressFile` 函数用于解压一个输入文件,并将结果保存到输出文件中。你可以根据你的需求修改这些函数的参数和行为。请确保已经安装了 Golang 环境,并且将输入文件和输出文件替换为你实际使用的文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值