如何修复没有标题的zlib文件?

时间:2016-02-05 01:58:54

标签: go zlib

我需要解压缩用zlib压缩的git对象。虽然该对象是用zlib压缩的,但它没有标题(为了节省带宽,我猜)。所以我试图在对象字节的顶部添加标题,但由于某些原因,zlib仍然抱怨标题无效。我怀疑标题字节是作为字符串文字而不是字节添加的,但我不确定。请参阅下面的代码。

assert(0)

错误

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

1 个答案:

答案 0 :(得分:3)

这是一个gzip标头,而不是zlib标头。

但是你还是不需要添加一个zlib头。如果是原始收缩数据,请使用compress/flate包而不是compress/zlib