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!