PHP編碼gzdeflate與Golang解碼DEFLATE

8月7日@黃同學(xué)找我問(wèn):“數(shù)據(jù)存到redis是gzdeflate壓縮過(guò)的數(shù)據(jù),golang從redis取出來(lái),解壓縮失敗”。很多從PHP轉(zhuǎn)Golang的業(yè)務(wù)經(jīng)常會(huì)遇到,所以寫(xiě)下這篇博文,希望可以幫助更多人。
想要使用golang解碼php的編碼,那么就應(yīng)該需要知道gzdeflate函數(shù)的算法是什么,先到gzdeflate文檔,查看了一下發(fā)現(xiàn):
gzdeflate使用的是純粹的DEFLATE格式。這就與golang的compress/flate包一致了。有了了解就可以看著golang文檔實(shí)現(xiàn)代碼了。遂與@黃同學(xué)同學(xué)寫(xiě)了幾個(gè)函數(shù)進(jìn)行驗(yàn)證,最后定稿如下:

創(chuàng)新互聯(lián)專(zhuān)注于網(wǎng)站建設(shè)|網(wǎng)站建設(shè)維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋門(mén)簾等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷(xiāo)售的產(chǎn)品,結(jié)合品牌形象的塑造,量身制作品質(zhì)網(wǎng)站。

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()
}

經(jīng)過(guò)@黃同學(xué)同學(xué)測(cè)試可以正確使用。留下wiki供后續(xù)遇到的同學(xué)查看。

當(dāng)前標(biāo)題:PHP編碼gzdeflate與Golang解碼DEFLATE
網(wǎng)頁(yè)URL:http://bm7419.com/article22/pcsgcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)