Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Daten variabler Länge in Golang effizient gepuffert werden?

Wie können Daten variabler Länge in Golang effizient gepuffert werden?

DDD
DDDOriginal
2024-10-26 12:43:03907Durchsuche

How to Efficiently Buffer Variable-Length Data in Golang?

Puffern von Daten variabler Länge in Golang

In einem Szenario, in dem Sie einen Puffer benötigen, um eingehende Daten variabler Länge zu verarbeiten, wird der vorgestellte Ansatz vorgestellt in der Frage verwendet einen Puffer fester Größe, was möglicherweise zu ineffizienten Lesevorgängen führt. Betrachten Sie die folgende verbesserte Lösung:

<code class="go">import (
    "bytes"
    "fmt"
    "io"
)

func readVariableLengthData(conn io.Reader) ([]byte, error) {
    buf := new(bytes.Buffer)

    if _, err := io.Copy(buf, conn); err != nil {
        return nil, err
    }

    return buf.Bytes(), nil
}</code>

Diese Lösung verwendet einen bytes.Buffer, der ein dynamisches Wachstum des Puffers nach Bedarf ermöglicht. So funktioniert dieser verbesserte Ansatz:

  1. Erstellen Sie einen bytes.Buffer: Der bytes.Buffer kann einen wachsenden Byte-Slice aufnehmen, sodass sich der Puffer erweitern kann, wenn neue Daten geschrieben werden dazu.
  2. Verwenden Sie io.Copy: Die io.Copy-Funktion kopiert effizient Daten vom Verbindungsleser (conn) in den bytes.Buffer.
  3. Geben Sie die Bytes des Puffers zurück: Sobald der Stream vollständig gelesen wurde, geben wir eine Kopie der im Puffer gespeicherten Bytes zurück.

Mit diesem überarbeiteten Ansatz können Sie Daten variabler Länge verarbeiten streamt ordnungsgemäß, ohne Speicher für ungenutzten Pufferspeicher zu verschwenden.

Das obige ist der detaillierte Inhalt vonWie können Daten variabler Länge in Golang effizient gepuffert 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