Lorsque vous travaillez avec des connexions réseau qui diffusent des données, il peut être nécessaire de lire une quantité arbitraire d'octets dans un tampon. Cependant, les solutions existantes sont souvent confrontées à des limites à la fin du flux, car les tampons de taille fixe peuvent conduire à une récupération incomplète des données.
L'approche actuelle implique la création d'un tampon de taille fixe. tampon et y lire des octets en utilisant conn.Read(buf). Cela fonctionne bien jusqu'à ce que la fin du flux soit atteinte, auquel cas les octets restants peuvent être inférieurs à la taille du tampon, ce qui entraîne des données incomplètes et un potentiel débordement de tampon ou corruption des données.
Une solution élégante à ce problème consiste à utiliser le type bytes.Buffer, qui fournit une tranche d'octets extensible. Au lieu d'utiliser un tampon de taille fixe, un bytes.Buffer peut être utilisé pour accumuler les octets au fur et à mesure qu'ils sont lus à partir de la connexion.
<code class="go">import "bytes" var b bytes.Buffer for { n, err := conn.Read(b.Bytes()) if err != nil || n == 0 { break } } Handle(b.Bytes())</code>
Cette approche garantit que tous les octets du flux sont conservés et transmis au gestionnaire dans un seul tampon, quelle que soit la longueur du flux. Il convient de noter qu'une mise en mémoire tampon excessive peut ne pas convenir à certaines applications et que la consommation de mémoire doit être prise en compte.
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!