我正在尝试使用“compress/gzip”包对一段字节进行 gzip。我正在写入 bytes.Buffer 并且我正在写入 45976 字节,当我尝试使用 gzip.reader 和 reader 函数解压缩内容时 - 我发现并非所有内容都被恢复。bytes.buffer 有一些限制吗?这是绕过或改变它的一种方式吗?这是我的代码(编辑):func compress_and_uncompress() { var buf bytes.Buffer w := gzip.NewWriter(&buf) i,err := w.Write([]byte(long_string)) if(err!=nil){ log.Fatal(err) } w.Close() b2 := make([]byte, 80000) r, _ := gzip.NewReader(&buf) j, err := r.Read(b2) if(err!=nil){ log.Fatal(err) } r.Close() fmt.Println("Wrote:", i, "Read:", j)}测试的输出(选择字符串作为 long_string)将给出 Wrote: 45976, Read 32768
3 回答
MYYA
TA贡献1868条经验 获得超4个赞
使用ioutil.ReadAll。io.Reader 的合同说它不必返回所有数据,并且有一个很好的理由让它与内部缓冲区的大小无关。 ioutil.ReadAll像 io.Reader 一样工作,但会一直读到 EOF。
例如(未经测试)
import "io/ioutil"
func compress_and_uncompress() {
var buf bytes.Buffer
w := gzip.NewWriter(&buf)
i,err := w.Write([]byte(long_string))
if err!=nil {
log.Fatal(err)
}
w.Close()
r, _ := gzip.NewReader(&buf)
b2, err := ioutil.ReadAll(r)
if err!=nil {
log.Fatal(err)
}
r.Close()
fmt.Println("Wrote:", i, "Read:", len(b2))
}
- 3 回答
- 0 关注
- 248 浏览
添加回答
举报
0/150
提交
取消