JavaScript C'est un langage qui a une bonne gestion des chaînes, mais parce qu'il a été initialement conçu pour gérer des documents HTML, il n'est pas très bon pour gérer les données binaires, en fait JavaScript n'a pas de type de données binaire en tant que tel, ne contient que des nombres structurés ou types.
Comme on le sait déjà Node.js est basé sur JavaScript et il peut gérer des protocoles de texte tels que HTTP, où vous pouvez également l'utiliser pour établir une communication avec des bases de données, manipuler des images et même gérer des manipulations de fichiers et, en raison de ce dont nous avons discuté, cela peut être assez compliqué.
Mais pour rendre ces tâches de manipulation binaire beaucoup plus faciles, Node.js inclut une implémentation de tampon binaire, qui nous permet d'obtenir et de définir les octets d'un tampon créé sans trop de problèmes.
ExigencesPour réaliser les exercices proposés dans ce tutoriel nous devons disposer d'une installation fonctionnelle de Node.js dans notre système, nous pouvons jeter un œil à ce tutoriel avant de continuer à l'approfondir. Il est également important de pouvoir avoir accès à un éditeur de texte riche pour coder les exemples, nous pouvons utiliser ce avec quoi nous nous sentons à l'aise, cependant, pour sa facilité d'utilisation, nous recommandons Texte sublime o NotePad++ qui a aussi des plugins pour la syntaxe JavaScript Oui HTML.
Création de tampon
Pour créer un buffer, c'est aussi simple que de créer une nouvelle instance de la classe Amortir(). Voyons comment nous créons un tampon simple basé sur un encodage UTF-8 comme suit :
var buf = new Buffer ('Bonjour tout le monde !'); console.log (buff);Nous allons exécuter notre exemple par console pour voir la réponse qu'il nous donne Node.js Concernant la création de notre buffer :
Comme nous le voyons si nous imprimons notre variable chamois, la réponse n'est peut-être pas celle à laquelle nous nous attendions, mais nous devons nous rappeler que nous créons une instance de Amortir et ce que fait cette classe, c'est coder son contenu selon un codage de caractères spécifique.
Nous pouvons également créer un tampon de chaîne avec d'autres encodages, qui seront valides tant que nous spécifions le même que le deuxième argument, voyons :
var buf2 = nouveau tampon ('9b38kte610la', 'base64'); console.log (buf2);Comme on peut le voir on peut spécifier l'encodage sans problème, voyons ensuite quels types d'encodage sont acceptés et leurs identifiants respectifs :
ASCII - ASCIIIl s'agit du type de codage standard et est limité par le codage de caractères du même nom.
utf8 - UTF-8Il s'agit d'une variable avec l'encodage qui peut représenter chaque caractère Unicode existant et c'est l'encodage par défaut de notre tampon dans le cas de n'en spécifier aucun.
base64 - Base64Il s'agit d'un type de codage utilisé pour représenter des données binaires dans un type de format de chaîne. ASCII et il est principalement utilisé pour intégrer des données binaires dans des documents texte afin de garantir que les données restent intactes lors de leur transport.
De plus, si nous n'avons pas le contenu initial de notre tampon et que nous devons en créer un, nous pouvons le faire en spécifiant sa capacité, pour cela nous le faisons de la manière suivante :
var buf = nouveau tampon (1024);Avec cela, nous créons un tampon de 1024 octets pour nos futures opérations.
Gestion des octets dans le buffer
Après avoir créé ou reçu le tampon, nous pouvons vouloir l'inspecter et modifier son contenu. Tout d'abord, pour accéder aux octets qu'il contient, nous pouvons utiliser les crochets comme suit :
var buf = new Buffer ('voici le contenu de mon buffer'); console.log (buf [10]);Si nous exécutons notre exemple, nous obtiendrons la dixième position du tampon, nous pouvons même passer à la neuvième position du tampon et voir le résultat, voyons à quoi cela ressemble :
Comme nous pouvons le voir, nous obtenons des octets aléatoires pour les positions de notre tampon, même si nous devons manipuler le contenu de n'importe quelle position, nous pouvons faire quelque chose comme ceci :
var buf = new Buffer ('voici le contenu de mon nouveau buffer'); buf [2] = 110; buf [6] = 180 ; buf [10] = 90 ; console.log (buf [2]); console.log (buf [6]); console.log (buf [10]);Voyons la réponse de la console de notre exemple :
Comme nous l'avons vu nous pouvions modifier le contenu de certaines positions au sein de notre buffer sans trop de problème, en plus de cela nous pouvons obtenir la taille de notre buffer avec la propriété longueur comme suit:
var buf = nouveau tampon (100); console.log (buf.length);Si nous sommes des observateurs, nous pouvons voir que la réponse de notre console sera de 100, où après avoir obtenu cette valeur, nous pouvons l'utiliser pour itérer sur notre tampon et ainsi manipuler chaque position pour obtenir sa valeur ou définir une valeur spécifique, Voyons un exemple simple de ceci :
var buf = nouveau tampon (100); pour (var i = 0; i <buf.length; i ++) {buf [i] = i; } console.log (buf);Ce que nous avons fait dans cet exemple a été de créer un nouveau amortir avec une capacité de 100 octets puis on met à chaque octet une valeur allant de 0 à 99, enfin voyons la réponse de la console quand on exécute notre exemple :
Extraction de données de tampon
Une autre caractéristique intéressante du buffer, une fois qu'on l'a créé ou reçu, est de pouvoir en extraire une partie. Nous pouvons le "couper" pour le dire d'une certaine manière et créer un autre tampon plus petit avec cette partie que nous avons coupée, sans oublier de spécifier d'où et vers où nous allons le couper, voyons un exemple pour illustrer ce que nous avons expliqué :
var buffer_complete = new Buffer ("c'est le contenu de mon buffer que nous allons découper"); var buffer_small = full_buffer.slice (26, 55); console.log (buffer_small.toString ());Comme on peut le voir, on crée d'abord l'instance de notre buffer avec le contenu initial, puis avec la fonction tranche () Nous précisons d'où et vers où nous allons obtenir le contenu, nous affectons ce que nous obtenons à une nouvelle variable et enfin nous décodons le contenu pour pouvoir visualiser le contenu de notre deuxième buffer, voyons la réponse par console lors de l'exécution du Exemple:
Il est important de mentionner que lorsque nous coupons un nouveau tampon, nous n'utilisons pas de nouvelle mémoire système, ce nouveau tampon utilise la mémoire du père puisqu'il ne fait référence qu'à elle mais avec un début et une fin différents. Cela peut poser quelques problèmes si nous ne faisons pas attention puisque nous travaillons sur le même tampon, pour cela nous recommandons de travailler avec la méthode copie pour éviter les problèmes, que nous verrons ci-dessous.
Copier un tampon
Comme nous l'avons mentionné, lors de la coupe d'un tampon, nous pouvons avoir des problèmes si nous ne faisons pas attention, mais pour cela, nous avons la méthode copie, qui permet de copier le contenu d'un buffer dans un nouveau buffer, en utilisant une nouvelle instance et un nouvel espace mémoire, voyons :
var buffer1 = new Buffer ("Content buffer number 1, content to copy"); var buffer2 = nouveau Buffer (20); var startobj = 0; var startSource = 26 ; var finsource = 50 ; buffer1.copy (buffer2, startobj, startSource, endSource); console.log (buffer2.toString ());Comme nous pouvons le voir, nous créons deux tampons différents, où le premier aura le contenu et le second n'aura que la taille, nous spécifions le début de notre deuxième tampon, et de la même manière nous indiquons le début et la fin pour le nouveau tampon que nous allons copier, voyons la réponse de la console lors de l'exécution de l'exemple :
Décoder un tampon
Comme nous l'avons vu dans les exemples précédents, nous avons pu imprimer le contenu original de notre tampon en utilisant la méthode toString (), c'est ce qu'on appelle décoder le tampon, où comme l'instance de la classe Amortir() si nous ne spécifions rien, par défaut nous le décodons en UTF-8.
On peut même faire un transcodage d'une chaîne UTF-8 à base64 pour ne citer qu'un cas, voyons :
var stringutf8 = 'ma nouvelle chaîne'; var buf = nouveau tampon (stringutf8); var chaîne de base64 = buf.toString ('base64') console.log (chaîne de base64);Voyons enfin comment nous avons transcodé notre chaîne d'origine :
Avec cela, nous terminons ce didacticiel où nous avons appris comment traiter les données binaires dans Node.js grâce à la classe Amortir, ce qui nous permet de le manipuler à partir de sa lecture, de son écriture, d'en obtenir de petits morceaux, de le copier dans de nouvelles instances et même de transformer ce tampon en de nouveaux types d'encodage pour sa manipulation dans nos programmes.