PHP編碼gzdeflate與Golang解碼DEFLATE
阿新 • • 發佈:2017-08-13
gzdeflate golang deflate 解碼 編碼
[email protected]:“數據存到redis是gzdeflate壓縮過的數據,golang從redis取出來,解壓縮失敗”。很多從PHP轉Golang的業務經常會遇到,所以寫下這篇博文,希望可以幫助更多人。
想要使用golang解碼php的編碼,那麽就應該需要知道gzdeflate函數的算法是什麽,先到gzdeflate文檔,查看了一下發現:gzdeflate使用的是純粹的DEFLATE格式
。這就與golang的compress/flate
包一致了。有了了解就可以看著golang文檔實現代碼[email protected],最後定稿如下:
package mainimport ( "strings" "fmt" "compress/flate" "bytes" "io/ioutil" "github.com/bitly/go-simplejson")func main() { str:="test123" str="" b:=Gzdeflate(str,-1) ss:=Gzdecode(string(b)) fmt.Println(ss) }// 解碼func Gzdecode(data string) string { if data == "" { return "" } r :=flate.NewReader(strings.NewReader(data)) defer r.Close() out, err := ioutil.ReadAll(r) if err !=nil { fmt.Errorf("%s\n",err) return "" } return string(out) }// 編碼func Gzdeflate(data string,level int) []byte { if data == "" { return []byte{} } var bufs bytes.Buffer w,_ :=flate.NewWriter(&bufs,level) w.Write([]byte(data)) w.Flush() defer w.Close() return bufs.Bytes() }// 編碼func GzdeflateForString(data string,level int) string { if data == "" { return "" } var bufs bytes.Buffer w,_ :=flate.NewWriter(&bufs,level) w.Write([]byte(data)) w.Flush() defer w.Close() return bufs.String() }
[email protected]續遇到的同學查看。
本文出自 “夢朝思夕” 博客,請務必保留此出處http://qiangmzsx.blog.51cto.com/2052549/1955868
PHP編碼gzdeflate與Golang解碼DEFLATE