buff := bytes.NewBuffer(somebytes)
如何在buff
之上書寫?目前我正在創建一個新的緩衝區。這是正確的方式嗎?是否可以在緩衝區上寫入?
newBuff := bytes.NewBuffer(otherbytes)
newBuff.ReadFrom(buff)
buff := bytes.NewBuffer(somebytes)
如何在buff
之上書寫?目前我正在創建一個新的緩衝區。這是正確的方式嗎?是否可以在緩衝區上寫入?
newBuff := bytes.NewBuffer(otherbytes)
newBuff.ReadFrom(buff)
bytes.NewBuffer()
返回一個*Buffer
。 *Buffer
implements 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{}
如果您想「覆蓋」curr緩衝區的內容,可以使用Buffer.Reset()
方法或等效的Buffer.Truncate(0)
調用。
注意,重置或截斷緩衝區將丟掉它的內容(或只是其中的一部分在Truncate()
情況,但分配的緩衝區(字節片)在後臺保存和再利用。
注:
你真正想要做的事情是不可能的:想象一下,如果你想在現有內容前插入一些數據,現有的內容將不得不在每次寫入/它的效率並不高,
取而代之的是在Buffer
中創建你的身體。一旦完成,你就會知道你的標題是什麼。在另一個Buffer
中創建標題,完成後,將主體(從第一個Buffer
)複製(寫入)到已包含標題的第二個標題中。
或者,如果您不需要存儲整個數據,則不需要爲標題創建第二個Buffer
。一旦身體準備就緒,將標題寫入輸出,然後從Buffer
中寫出正文。
問題是如何在「abc」上寫「def」。 –
我的用例是我編寫各種數據,並在每次寫入後都跟蹤「依賴關係」。在我寫完所有「body」部分之後,我需要將頭部的所有依賴關係寫在主體(緩衝區)之上。 –
@Theuserwithnohat所以你想在正文之前插入標題?或者標題的空間是保留的,你想稍後填寫(在正文寫完之後)? – icza
你想從'somebytes'開始並向它添加(寫入)更多的字節嗎? – icza
在我的代碼中,我實際上只有「buff」;一些字節是buff本身的結果(buff.Bytes),所以我想知道我是隻能使用一個緩衝區還是需要兩個緩衝區。 –