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字节之后会出现错误,则会收到错误消息。