Go 如何修复没有头的zlib文件?

Go 如何修复没有头的zlib文件?,go,zlib,Go,Zlib,我需要解压缩一个git对象,它是用zlib压缩的。虽然对象是用zlib压缩的,但它没有头(我想是为了节省带宽)。因此,我试图在对象字节的顶部添加头,但由于某些原因,zlib仍然抱怨头无效。我怀疑头字节是作为字符串文字而不是字节添加的,但我不确定。请参阅下面的代码 package main import( "compress/zlib" "io/ioutil" "bytes" "fmt" // "strin

我需要解压缩一个git对象,它是用zlib压缩的。虽然对象是用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)
}
错误


这是gzip头,不是zlib头


但无论如何,您不需要添加zlib头。如果是原始放气数据,则使用
compress/flate
包,而不是
compress/zlib

从哪里获得标题值?大多数zlib头以0x78开头,只有两个字节长。有关更多详细信息,请参阅。
panic: zlib: invalid header

goroutine 1 [running]:
main.main()
    /Users/themihai/test/main.go:27 +0x29e
exit status 2