如何修复无头文件的zlib文件? [英] How to fix a zlib file without header?

查看:199
本文介绍了如何修复无头文件的zlib文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要解压缩一个用zlib压缩的git对象。虽然该对象是用zlib压缩的,但它没有标题(为了节省带宽,我猜)。所以我试图在对象字节的顶部添加标题,但由于某些原因,zlib仍然抱怨标题无效。我怀疑头字节被添加为字符串文字而不是字节,但我不知道。

  package main 

import(
compress / zlib
io / ioutil
字节
fmt
//字符串



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(报头); 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:无效标题

goroutine 1 [running]:
main.main()
/Users/themihai/test/main.go:27 + 0x29e
退出状态2


解决方案

这是一个gzip头文件,而不是zlib头文件。 b
$ b

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


I need to uncompress a git object which is compressed with zlib. Although the object is compressed with zlib it has no header(to save bandwidth I guess). So I'm trying to add the header on top of the object bytes but for some reasons zlib still complains that the header is not valid. I suspect the header bytes are added as string literal instead of bytes but I'm not sure. See the code below.

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

Error

panic: zlib: invalid header

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

解决方案

That's a gzip header, not a zlib header.

But you don't need to add a zlib header anyway. If it is raw deflate data, then use the compress/flate package instead of compress/zlib.

这篇关于如何修复无头文件的zlib文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆