Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann die Puffergröße beim Lesen beliebiger Bytes aus einer Verbindung in Go beibehalten werden?

Wie kann die Puffergröße beim Lesen beliebiger Bytes aus einer Verbindung in Go beibehalten werden?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 07:47:30950Durchsuche

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

Erhaltung des Puffers beim Lesen beliebiger Bytes von einer Verbindung in Go

In Situationen, in denen ein Datenstrom von einer Verbindung und darüber hinaus gelesen werden muss Bei der Verarbeitung in Blöcken entsteht eine häufige Herausforderung: die Handhabung unterschiedlicher Streamlängen und die Unterbringung beliebiger Bytezahlen.

Betrachten Sie den folgenden Codeausschnitt, in dem ein 256-Byte-Puffer zum Lesen und Verarbeiten von Daten aus einer Verbindung verwendet wird:

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

Während dieser Ansatz gut funktioniert, wenn genügend Bytes verfügbar sind, treten beim Ende des Streams Probleme auf, was dazu führt, dass weniger als 256 Bytes lesbar sind. Um dieses Szenario reibungslos zu bewältigen, ist eine alternative Lösung erforderlich.

Ein Ansatz besteht darin, einen bytes.Buffer zu verwenden, der eine bequeme Möglichkeit bietet, von der Verbindung empfangene Daten zu sammeln. Durch die Nutzung von bytes.Buffer kann der gesamte Datenstrom akkumuliert und in einem einzigen Vorgang an den gewünschten Handler übergeben werden:

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

Mit dieser Implementierung empfängt die Handle-Funktion den gesamten Datenstrom als einen einzigen Byte-Slice, wodurch eine nahtlose Verarbeitung unabhängig von ihrer Länge gewährleistet wird.

Durch diesen Ansatz können Entwickler Streams beliebiger Länge effektiv verarbeiten und dabei die gewünschte Puffergröße beibehalten, während gleichzeitig die Integrität der von der Verbindung empfangenen Daten gewahrt bleibt.

Das obige ist der detaillierte Inhalt vonWie kann die Puffergröße beim Lesen beliebiger Bytes aus einer Verbindung in Go beibehalten werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn