在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中文網其他相關文章!