Maison >développement back-end >Golang >Comment décompresser efficacement des entiers d'un tampon d'octets dans Go ?

Comment décompresser efficacement des entiers d'un tampon d'octets dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-01 10:40:14272parcourir

How to Efficiently Unpack Integers from a Byte Buffer in Go?

Comment décompresser efficacement des entiers d'un tampon d'octets dans Golang

En Golang, lors de la manipulation d'un tampon d'octets, il est souvent nécessaire d'extraire différents types d’entiers de manière efficace. Cet article décrit deux approches qui décompactent efficacement divers types d'entiers à partir d'un tampon d'octets tout en respectant des exigences spécifiques : maintenir des décalages explicites et lire directement à partir du tampon d'octets.

Approche 1 : Utiliser .Next() pour Ignorer les octets indésirables

Une approche consiste à créer un nouveau tampon chaque fois que vous souhaitez lire un entier. Pour éviter cette surcharge, vous pouvez utiliser la méthode .Next() pour ignorer les octets que vous ne souhaitez pas lire. Par exemple :

buf := make([]byte, 1024)
// ...

p := bytes.NewBuffer(buf)
// Read the first integer
binary.Read(p, binary.LittleEndian, &inodeCount)

// Skip unwanted bytes
p.Next(12)

// Read the next integer
binary.Read(p, binary.LittleEndian, &firstDataBlock)
// ...

Approche 2 : Utilisation d'une structure d'en-tête

Une approche alternative consiste à créer une structure d'en-tête qui correspond au format du tampon d'octets. Cela vous permet de lire l'intégralité de l'en-tête directement à l'aide de binaire.Read(). Par exemple :

type Header struct {
    InodeCount      uint32
    BlockCount      uint32
    // ...
}

buf := make([]byte, 1024)
// ...

var header Header
err := binary.Read(bytes.NewBuffer(buf), binary.LittleEndian, &header)
if err != nil {
    // ...
}

fmt.Printf("%#v", header)

Conclusion

Les deux approches permettent un décompression efficace des entiers à partir d'un tampon d'octets tout en répondant aux exigences de décalages explicites et de lecture directe à partir du tampon . Le choix entre eux dépend des exigences spécifiques et des caractéristiques de performance de votre application.

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!

Déclaration:
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