Maison > développement back-end > Golang > Comment lire des octets arbitraires dans un tampon dans Golang : gérer efficacement les flux de données variables ?

Comment lire des octets arbitraires dans un tampon dans Golang : gérer efficacement les flux de données variables ?

Mary-Kate Olsen
Libérer: 2024-10-27 08:09:31
original
511 Les gens l'ont consulté

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

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal