【问题标题】:How to fix a zlib file without header?如何修复没有标题的zlib文件?
【发布时间】: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

【问题讨论】:

标签: go zlib


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多