buff := bytes.NewBuffer(somebytes)
如何在buff
之上书写?目前我正在创建一个新的缓冲区。这是正确的方法吗?
newBuff := bytes.NewBuffer(otherbytes)
newBuff.ReadFrom(buff)
答案 0 :(得分:4)
bytes.NewBuffer()
返回*Buffer
。 *Buffer
实施io.Writer
(以及io.Reader
),因此您可以通过调用Write()
或WriteString()
方法来写信给它。
示例:
somebytes := []byte("abc")
buff := bytes.NewBuffer(somebytes)
buff.Write([]byte("def"))
fmt.Println(buff)
按预期输出(在Go Playground上试试):
abcdef
如果你想从一个空缓冲区开始,你可以简单地创建一个空Buffer
结构(并获取其地址):
buff := &bytes.Buffer{}
如果您要“覆盖”缓冲区的当前内容,可以使用Buffer.Reset()
方法或等效的Buffer.Truncate(0)
来电。
请注意,重置或截断缓冲区会丢弃内容(或Truncate()
的情况下只丢弃一部分内容。但后台保留并重用已分配的缓冲区(字节切片)。
注意:强>
你真正想做的事情是不可能直接做的:想象一下如果你想在现有内容之前插入一些数据,每次你在它前面写一些东西时都必须改变现有的内容。这不是很有效。
而是在Buffer
中创建您的身体。完成后,您将知道您的标题是什么。在另一个Buffer
中创建标题,完成后,将正文(从第一个Buffer
)复制(写入)到已包含标题的第二个。
或者,如果您不需要存储整个数据,则无需为标题创建第二个Buffer
。正文就绪后,将标题写入输出,然后从Buffer
写下正文。