golang bytes.Buffer Reset


func t() {
    a := []byte{'1', '2'}
    buf := new(bytes.Buffer)
    buf.Write(a)
    b := buf.Bytes()
    fmt.Println(b)
    buf.Reset()
    c := []byte{'3'}
    buf.Write(c)
    fmt.Println(b)
}

上面運行結果是

[49 50]
[51 50]

--> 結論:

bytes.Buffer Reset之后,如果再寫入新的數據,如果數據的長度沒有超過Reset之前緩沖區的長度,那么Buffer內部不會重新開辟內存,也就是說,

寫入的數據會覆蓋之前的數據。

在本例中,這里【之前的數據】就是那個 b , 很明顯它的第一個字節已經被修改了。

 

--> 如果你寫入的數據長度超過前面的長度,那么就不會這樣了(b就不會被改寫了),可以自行試驗。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM