2016-02-05 31 views
0

我需要解壓縮一個用zlib壓縮的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) 
} 

錯誤

panic: zlib: invalid header 

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

你從哪裏得到該標題值?大多數zlib頭文件以0x78開始,並且只有兩個字節長。有關更多詳細信息,請參閱http://stackoverflow.com/questions/9050260/what-does-a-zlib-header-look-like。 – djd

回答

3

這是一個gzip頭,而不是zlib的頭。

但是,無論如何您都不需要添加zlib標頭。如果是原始減壓數據,則使用compress/flate包而不是compress/zlib

相關問題