91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP編碼gzdeflate與Golang解碼DEFLATE

發布時間:2020-07-29 12:18:14 來源:網絡 閱讀:1556 作者:夢朝思夕 欄目:編程語言

8月7日@黃同學找我問:“數據存到redis是gzdeflate壓縮過的數據,golang從redis取出來,解壓縮失敗”。很多從PHP轉Golang的業務經常會遇到,所以寫下這篇博文,希望可以幫助更多人。
想要使用golang解碼php的編碼,那么就應該需要知道gzdeflate函數的算法是什么,先到gzdeflate文檔,查看了一下發現:
gzdeflate使用的是純粹的DEFLATE格式。這就與golang的compress/flate包一致了。有了了解就可以看著golang文檔實現代碼了。遂與@黃同學同學寫了幾個函數進行驗證,最后定稿如下:

package main

import (
	"strings"
	"fmt"
	"compress/flate"
	"bytes"
	"io/ioutil"
)

func main() {
	str:="huangyupeng123"
	b:=Gzdeflate(str,-1)
	ss:=Gzencode(string(b))
	fmt.Println(ss)
	/*str:="huangyupeng123"
	ss:=Gzdeflate(str,0)
	fmt.Println(ss)
	s=Gzencode(ss)
	fmt.Println(s)*/
}

// 解碼
func Gzencode(data string) string  {
	r :=flate.NewReader(strings.NewReader(data))
	defer r.Close()
	out, err := ioutil.ReadAll(r)
	if err !=nil {
		fmt.Errorf("%s\n",err)
	}
	return string(out)
}

// 編碼
func Gzdeflate(data string,level int) []byte  {
	var bufs bytes.Buffer
	w,_ :=flate.NewWriter(&bufs,level)
	w.Write([]byte(data))
	w.Flush()
	w.Close()
	return bufs.Bytes()
}

// 編碼
func GzdeflateForString(data string,level int) string  {
	var bufs bytes.Buffer
	w,_ :=flate.NewWriter(&bufs,level)
	w.Write([]byte(data))
	w.Flush()
	defer w.Close()
	return bufs.String()
}

經過@黃同學同學測試可以正確使用。留下wiki供后續遇到的同學查看。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辛集市| 武强县| 老河口市| 岫岩| 阿合奇县| 金乡县| 天全县| 介休市| 房山区| 大邑县| 博湖县| 班玛县| 台江县| 井冈山市| 鄂托克前旗| 马尔康县| 无为县| 赫章县| 辛集市| 金阳县| 开鲁县| 乳山市| 达州市| 青海省| 东乌| 静安区| 曲阜市| 武山县| 丰台区| 诸暨市| 桦川县| 砀山县| 郯城县| 高淳县| 平定县| 朝阳区| 兴仁县| 舟山市| 长武县| 花垣县| 沁阳市|