首頁  >  文章  >  後端開發  >  如何在 Go 中從連線讀取任意位元組時保留緩衝區大小?

如何在 Go 中從連線讀取任意位元組時保留緩衝區大小?

Linda Hamilton
Linda Hamilton原創
2024-10-26 07:47:30950瀏覽

How to Preserve Buffer Size While Reading Arbitrary Bytes from a Connection in Go?

在Go 中從連接讀取任意位元組時保留緩衝區

必須從連接讀取資料流並進一步讀取的情況下以區塊的形式處理時,出現了一個常見的挑戰:處理不同的流長度並適應任意位元組數。

考慮以下程式碼片段,其中使用256 位元組緩衝區來讀取和處理來自連接的資料:

buf := make([]byte, 256)
for {
    n, err := conn.Read(buf)
    fmt.Println(string(buf))
    if err != nil || n== 0 {
        return
    }
    Handle(buf[:n])
}

雖然這種方法在有足夠位元組可用時效果很好,但在串流結束時會遇到問題,導致可讀位元組少於256 個。為了妥善處理這種情況,需要替代解決方案。

一種方法是利用 bytes.Buffer,它提供了一種收集從連接接收的資料的便捷方法。透過利用bytes.Buffer,可以在單一操作中累積完整的資料流並將其傳遞到所需的處理程序:

var b bytes.Buffer
if _, err := io.Copy(&b, conn); err != nil {
   return err
}
Handle(b.Bytes())

透過此實現,Handle 函數將整個資料流作為單一資料流接收位元組切片,確保無縫處理,無論其長度如何。

透過採用這種方法,開發人員可以有效地處理任意長度的流,保留所需的緩衝區大小,同時保持從連接接收的資料的完整性。

以上是如何在 Go 中從連線讀取任意位元組時保留緩衝區大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn