Tampons de nœud

Découvrez ce que sont les tampons Node, à quoi ils servent, comment les utiliser

Qu'est-ce qu'un tampon?

Un tampon est une zone de mémoire. Les développeurs JavaScript ne sont pas familiers avec ce concept, beaucoup moins que les développeurs C, C ++ ou Go (ou tout programmeur utilisant un langage de programmation système), qui interagissent quotidiennement avec la mémoire.

Il représente un bloc de mémoire de taille fixe (ne peut pas être redimensionné) alloué en dehors du moteur JavaScript V8.

Vous pouvez penser à un tampon comme un tableau d'entiers, qui représentent chacun un octet de données.

Il est implémenté par le NodeClasse de tampon.

Pourquoi avons-nous besoin d'un tampon?

Des tampons ont été introduits pour aider les développeurs à gérer les données binaires, dans un écosystème qui ne traitait traditionnellement que des chaînes plutôt que des binaires.

Les tampons sont profondément liés àruisseaux. Lorsqu'un processeur de flux reçoit des données plus rapidement qu'il ne peut les digérer, il les place dans une mémoire tampon.

Une simple visualisation d'un tampon se produit lorsque vous regardez une vidéo YouTube et que la ligne rouge dépasse votre point de visualisation: vous téléchargez des données plus rapidement que vous ne les visualisez et votre navigateur les met en mémoire tampon.

Comment créer un tampon

Un tampon est créé à l'aide duBuffer.from(),Buffer.alloc(), etBuffer.allocUnsafe()méthodes.

const buf = Buffer.from('Hey!')

Vous pouvez également simplement initialiser le tampon en passant la taille. Cela crée un tampon de 1 Ko:

const buf = Buffer.alloc(1024)
//or
const buf = Buffer.allocUnsafe(1024)

Utiliser un tampon

Accéder au contenu d'un tampon

Un tampon, étant un tableau d'octets, est accessible comme un tableau:

const buf = Buffer.from('Hey!')
console.log(buf[0]) //72
console.log(buf[1]) //101
console.log(buf[2]) //121

Ces nombres sont le code Unicode qui identifie le caractère dans la position du tampon (H => 72, e => 101, y => 121)

Vous pouvez imprimer l'intégralité du contenu du tampon à l'aide dutoString()méthode:

console.log(buf.toString())

Notez que si vous initialisez un tampon avec un nombre qui définit sa taille, vous aurez accès à une mémoire pré-initialisée qui contiendra des données aléatoires, pas un tampon vide!

Obtenir la longueur d'un tampon

Utilisez lelengthbiens:

const buf = Buffer.from('Hey!')
console.log(buf.length)

Itérer sur le contenu d'un tampon

const buf = Buffer.from('Hey!')
for (const item of buf) {
  console.log(item) //72 101 121 33
}

Changer le contenu d'un tampon

Vous pouvez écrire dans un tampon toute une chaîne de données en utilisant lewrite()méthode:

const buf = Buffer.alloc(4)
buf.write('Hey!')

Tout comme vous pouvez accéder à un tampon avec une syntaxe de tableau, vous pouvez également définir le contenu du tampon de la même manière:

const buf = Buffer.from('Hey!')
buf[1] = 111 //o
console.log(buf.toString()) //Hoy!

Copier un tampon

La copie d'un tampon est possible en utilisant lecopy()méthode:

const buf = Buffer.from('Hey!')
let bufcopy = Buffer.alloc(4) //allocate 4 bytes
buf.copy(bufcopy)

Par défaut, vous copiez tout le tampon. 3 autres paramètres vous permettent de définir la position de départ, la position de fin et la nouvelle longueur du tampon:

const buf = Buffer.from('Hey!')
let bufcopy = Buffer.alloc(2) //allocate 2 bytes
buf.copy(bufcopy, 0, 2, 2)
bufcopy.toString() //'He'

Trancher un tampon

Si vous souhaitez créer une visualisation partielle d'un tampon, vous pouvez créer une tranche. Une tranche n'est pas une copie: le tampon d'origine est toujours la source de vérité. Si cela change, votre tranche change.

Utilisez leslice()méthode pour le créer. Le premier paramètre est la position de départ et vous pouvez spécifier un deuxième paramètre facultatif avec la position finale:

const buf = Buffer.from('Hey!')
buf.slice(0).toString() //Hey!
const slice = buf.slice(0, 2)
console.log(slice.toString()) //He
buf[1] = 111 //o
console.log(slice.toString())

Téléchargez mon gratuitManuel de Node.js


Plus de didacticiels sur les nœuds: