Lecture d'octets arbitraires dans un tampon en Golang
La lecture de données d'un flux dans un tampon peut parfois nécessiter la lecture d'un nombre arbitraire d'octets. Par exemple, considérons un scénario dans lequel vous lisez des données à partir d'une connexion et devez les transmettre à un gestionnaire.
Une approche courante consiste à créer un tampon de taille fixe et à utiliser la méthode Read() :
<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>
Bien que cette solution fonctionne dans de nombreux cas, elle peut rencontrer des problèmes si le flux ne dispose pas de suffisamment d'octets pour remplir le tampon. Pour résoudre ce problème, vous pouvez utiliser la solution suivante :
<code class="go">var b bytes.Buffer if _, err := io.Copy(&b, conn); err != nil { return err } Handle(b.Bytes())</code>
Cette approche utilise la fonction io.Copy(), qui lit l'intégralité du flux dans un tampon d'octets. Vous pouvez ensuite récupérer les octets et les transmettre à votre gestionnaire. Cela garantit que vous lisez l'intégralité du flux, quel que soit le nombre d'octets disponibles à un moment donné.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!