Go 将无限字节写入字节。缓冲区

Go 将无限字节写入字节。缓冲区,go,Go,当我运行以下代码时 func writeBytes() ([]byte, error) { var buf bytes.Buffer dstBytes := bufio.NewWriter(&buf) writeTonsOfBytes(dstBytes) b := buf.Bytes() fmt.Println(len(b)) return b, nil } 我得到输出 32768 这向我发出信号,我的bytes.Buffer实例必须有

当我运行以下代码时

func writeBytes() ([]byte, error) {
    var buf bytes.Buffer
    dstBytes := bufio.NewWriter(&buf)
    writeTonsOfBytes(dstBytes)
    b := buf.Bytes()
    fmt.Println(len(b))
    return b, nil
}
我得到输出

32768
这向我发出信号,我的
bytes.Buffer
实例必须有一个限制,我找不到相关文档

如何向
字节缓冲区写入无限字节数?

没有调用

dstBytes.Flush()
在代码中。当前未写入
buf
的任何字节都将保持未写入状态,导致
buf
writeTonsOfBytes
中写入
dstBytes
的字节记录不完整


它还解释了为什么写入的字节数最终会是2的幂,因为新字节会以这样的增量写入基础缓冲区。

为了写入无限数量的字节,您必须首先拥有无限数量的内存?但是说真的,请确保调用了
dstBytes.Flush()
,并且
writeTonsOfBytes
并没有完全写入32768。@TimCooper我运行了
dstBytes.Write([]字节(“更多内容”)
,然后是
dstBytes.Flush()
,然后再获取
b:=buf.Bytes()
和数字相同。
writeTonsOfBytes
函数的代码是什么?实际上它看起来像是
dstBytes.Flush()
可能已经修复了生产代码中的问题。谢谢@TimCooper。如果你想发布答案,我会接受的。你为什么在这里使用
bufio.Writer
?如果您直接写入到
bytes.Buffer
中,并且在32768字节之后会出现错误,则会收到错误消息。