Heim  >  Artikel  >  Backend-Entwicklung  >  Wie liest man in Golang beliebige Bytes in einen Puffer: Effizienter Umgang mit variablen Datenströmen?

Wie liest man in Golang beliebige Bytes in einen Puffer: Effizienter Umgang mit variablen Datenströmen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 08:09:31432Durchsuche

How to Read Arbitrary Bytes into a Buffer in Golang: Efficiently Handling Variable Data Streams?

Beliebige Bytes in den Puffer in Golang lesen

Das Lesen von Daten aus einem Stream in einen Puffer kann manchmal das Lesen einer beliebigen Anzahl von Bytes erfordern. Stellen Sie sich beispielsweise ein Szenario vor, in dem Sie Daten aus einer Verbindung lesen und diese an einen Handler übergeben müssen.

Ein gängiger Ansatz besteht darin, einen Puffer mit fester Größe zu erstellen und die Read()-Methode zu verwenden:

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

Obwohl diese Lösung in vielen Fällen funktioniert, kann es zu Problemen kommen, wenn der Stream nicht über genügend Bytes verfügt, um den Puffer zu füllen. Um dieses Problem zu beheben, können Sie die folgende Lösung verwenden:

<code class="go">var b bytes.Buffer
if _, err := io.Copy(&b, conn); err != nil {
    return err
}

Handle(b.Bytes())</code>

Dieser Ansatz nutzt die Funktion io.Copy(), die den gesamten Stream in einen Bytepuffer liest. Anschließend können Sie die Bytes abrufen und an Ihren Handler übergeben. Dadurch wird sichergestellt, dass Sie den gesamten Stream lesen, unabhängig von der Anzahl der zu einem bestimmten Zeitpunkt verfügbaren Bytes.

Das obige ist der detaillierte Inhalt vonWie liest man in Golang beliebige Bytes in einen Puffer: Effizienter Umgang mit variablen Datenströmen?. 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