2013-06-05 22 views
5

http hizmetinden bir veri alıyorum ve numaralı telefondan kodunu açmak istiyorum. io.ReadCloser unzip nasıl açılır?

resp, err := http.Get(url) 
if err != nil { 
    logger.Fatalf("Can't fatch %s data. %v", url, err) 
} 
logger.Info("Fetched data from %s", url) 
content_zipped, err := ioutil.ReadAll(resp.Body) 
resp.Body.Close() 
if err != nil { 
    logger.Fatal(err) 
} 
zip_reader, err := zip.NewReader(bytes.NewReader(content_zipped), int64(len(content_zipped))) 

seferde (6. hat) tüm içeriği okumadan resp.Body halletmek için herhangi bir yolu var mı: İşte benim şimdiki yaklaşımdır? akışını bayt olarak kastediyorum.

cevap

9

Zip arşivleri okuma için rasgele erişim gerektirir, bu nedenle bayt akışı zordur. Özellikle, zip.Reader.init kaynağına şu adresten bakın: http://golang.org/src/pkg/archive/zip/reader.go?s=1265:1323#L59. Yaptığı ilk şey, dosyanın sonuna yakın bir yerden okunan readDirectoryEnd numaralı telefonu aramaktır.

Farklı bir sıkıştırma yöntemi (örneğin, gzip) kullanabilir misiniz? Ardından veri akışı için gzip.NewReader(resp.Body)'u kullanabilirsiniz.

+0

Hizmetin verileri bir zip dosyasıdır. –