【发布时间】:2016-02-05 01:58:54
【问题描述】:
我需要解压缩一个用 zlib 压缩的 git 对象。尽管该对象是用 zlib 压缩的,但它没有标头(我猜是为了节省带宽)。所以我试图在对象字节的顶部添加标题,但由于某些原因,zlib 仍然抱怨标题无效。我怀疑标头字节是作为字符串文字而不是字节添加的,但我不确定。请参阅下面的代码。
package main
import(
"compress/zlib"
"io/ioutil"
"bytes"
"fmt"
// "strings"
)
func main(){
b, err := ioutil.ReadFile("raw")
if err !=nil{
panic(err)
}
const header = "\x1f\x8b\x08\x00\x00\x00\x00\x00"
buf := bytes.NewBuffer(nil)
if _, err := buf.WriteString(header); err !=nil{
panic(err)
}
if _, err := buf.Write(b); err !=nil{
panic(err)
}
r, err := zlib.NewReader(buf)
if err !=nil{
panic(err)
}
defer r.Close()
var db []byte
if _, err := r.Read(db); err !=nil{
panic(err)
}
fmt.Printf("%s", db)
}
错误
panic: zlib: invalid header
goroutine 1 [running]:
main.main()
/Users/themihai/test/main.go:27 +0x29e
exit status 2
【问题讨论】:
-
你从哪里得到这个标题值?大多数 zlib 标头以 0x78 开头,并且只有两个字节长。有关详细信息,请参阅stackoverflow.com/questions/9050260/…。