gpt4 book ai didi

go - bytes.Buffer 的限制?

转载 作者:IT王子 更新时间:2023-10-29 01:20:34 28 4
gpt4 key购买 nike

我正在尝试使用包“compress/gzip”压缩一段字节。我正在写入一个 bytes.Buffer 并且我正在写入 45976 字节,当我尝试使用 gzip.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)会给出写了:45976,读了 32768

最佳答案

继续阅读以获取剩余的 13208 个字节。第一次读取返回 32768 字节,第二次读取返回 13208 字节,第三次读取返回零字节和 EOF。

例如,

package main

import (
"bytes"
"compress/gzip"
"fmt"
"io"
"log"
)

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 := 0
for {
n, err := r.Read(b2[:cap(b2)])
b2 = b2[:n]
j += n
if err != nil {
if err != io.EOF {
log.Fatal(err)
}
if n == 0 {
break
}
}
fmt.Println(len(b2))
}
r.Close()

fmt.Println("Wrote:", i, "Read:", j)
}

var long_string string

func main() {
long_string = string(make([]byte, 45976))
compress_and_uncompress()
}

输出:

32768
13208
Wrote: 45976 Read: 45976

关于go - bytes.Buffer 的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19229253/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com