Comment décompresser efficacement les valeurs entières d'un tampon d'octets dans Go
Extraire divers champs d'un flux de données binaires peut être une tâche courante dans programmation. Dans Go, le package bytes fournit des méthodes pour lire et manipuler les tampons d'octets.
Question :
Comment pouvons-nous lire et décompresser plusieurs champs entiers à partir d'un tampon d'octets dans un de manière plus efficace, tout en conservant des décalages de champ explicites et en minimisant la mémoire tampon redondante allocation ?
Réponse :
Voici deux approches :
1. Utilisation de bytes.Buffer.Next() pour ignorer les octets indésirables :
Au lieu de créer un nouveau tampon pour chaque champ, vous pouvez utiliser la méthode bytes.Buffer.Next() pour ignorer les octets indésirables. Cette approche évite l'allocation de mémoire et rationalise le processus de lecture :
p := bytes.NewBuffer(buf) // ... p.Next(12) // Skip [8:20) binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock) // ...
2. Utilisation d'une structure pour lire directement l'en-tête :
Cette méthode élimine le besoin de manipulations répétées du tampon. Vous pouvez définir une structure représentant la disposition de l'en-tête et lire directement à partir du tampon à l'aide de binaire.Read() :
type Head struct { // Field definitions } var header Head err := binary.Read(file, binary.LittleEndian, &header)
Les deux approches fournissent des moyens efficaces et fiables pour décompresser les valeurs entières d'un tampon d'octets dans Go, tandis que répondant aux exigences spécifiées.
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!