dongshi9526 2015-08-14 20:26
浏览 213
已采纳

Golang:为什么compress / gzip Read函数不能读取文件内容?

I made a text file, that I then compressed with gzip. I then run the following go program to read the contents of that compressed file.

package main

import (
    "compress/gzip"
    "fmt"
    "os"
)

func main() {
    handle, err := os.Open("zipfile.gz")
    if err != nil {
        fmt.Println("[ERROR] File Open:", err)
    }
    defer handle.Close()

    zipReader, err := gzip.NewReader(handle)
    if err != nil {
        fmt.Println("[ERROR] New gzip reader:", err)
    }
    defer zipReader.Close()

    var fileContents []byte
    bytesRead, err := zipReader.Read(fileContents)
    if err != nil {
        fmt.Println("[ERROR] Reading gzip file:", err)
    }
    fmt.Println("[INFO] Number of bytes read from the file:", bytesRead)
    fmt.Printf("[INFO] Uncompressed contents: '%s'
", fileContents)
}

The response that I get is the following:

$ go run zipRead.go
[INFO] Number of bytes read from the file: 0
[INFO] Uncompressed contents: ''

Why am I not getting any contents from the file?

I have created zip files on both OS X and Ubuntu. I have build this go program on both OS X and Ubuntu with the same result.

  • 写回答

1条回答 默认 最新

  • donglu1881 2015-08-14 21:00
    关注

    io.Reader.Read will only read up to len(b) bytes. Since your fileContents is nil, its length is 0. Allocate some space for it to read into:

    fileContents := make([]byte, 1024) // Read by 1 KiB.
    bytesRead, err := zipReader.Read(fileContents)
    if err != nil {
        fmt.Println("[ERROR] Reading gzip file:", err)
    }
    fileContents = fileContents[:bytesRead]
    

    If you want to read the whole file, you'll have to either use Read several times, or use things like ioutil.ReadAll (which may be bad for big files).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ssh登录页面的问题
  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥15 stm32 串口通讯过程中的问题
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问