Maison  >  Article  >  interface Web  >  Qu'est-ce que Buffer dans NodeJS et explication détaillée des exemples d'utilisation

Qu'est-ce que Buffer dans NodeJS et explication détaillée des exemples d'utilisation

伊谢尔伦
伊谢尔伦original
2017-07-24 10:56:252648parcourir

Le soi-disant tampon Buffer signifie « zone de stockage temporaire », qui est une section de mémoire qui stocke temporairement les données d'entrée et de sortie.

Le langage JS lui-même n'a qu'un type de données chaîne et aucun type de données binaire, donc NodeJS fournit un constructeur global Buffer équivalent à String pour fournir des opérations sur les données binaires. En plus de lire le fichier pour obtenir une instance de Buffer, il peut également être construit directement, par exemple :

 var buffer = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;

Buffer est similaire à une chaîne en plus d'utiliser l'attribut .length pour obtenir le. longueur d'octet, vous pouvez également utiliser la méthode [index ] pour lire les octets à la position spécifiée, par exemple :

buffer[0] ; // 0x68;

Le tampon et la chaîne peuvent être convertis l'un en l'autre, par exemple, vous pouvez utiliser le spécifié encodage pour convertir des données binaires en chaîne :

var str = buffer.toString("utf-8");  // hello

Convertir la chaîne en données binaires sous l'encodage spécifié :

var buffer= new Buffer("hello", "utf-8") ; // <Buffer 68 65 6c 6c 6f>

Une petite différence :

Le tampon a une différence importante avec la ficelle. La chaîne est en lecture seule et toute modification de la chaîne entraîne la création d'une nouvelle chaîne, tandis que la chaîne d'origine reste inchangée.

Quant à Buffer, il ressemble plus à un tableau en langage C qui peut effectuer des opérations de pointeur. Par exemple, vous pouvez utiliser la méthode [index] pour modifier directement les octets à une certaine position. La méthode

slice ne renvoie pas un nouveau Buffer, mais revient plutôt à renvoyer un pointeur vers une position au milieu du Buffer d'origine, comme indiqué ci-dessous.

[ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]
^ ^
| réunion de révision Agit sur le Buffer d'origine, par exemple :

Si vous le souhaitez copier un Buffer, vous devez d'abord créer un nouveau Buffer et copier les données dans le Buffer d'origine via la méthode .copy.
 var buffer= new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
 var sub = bin.slice(2) ;
 sub[0] = 0x65 ;
 console.log(buffer) ; //  <Buffer 68 65 65 6c 6f>

Cela revient à demander une nouvelle mémoire et à copier les données dans la mémoire existante. Ci-dessous un exemple.

En bref, Buffer étend les capacités de traitement des données de JS des chaînes aux données binaires arbitraires.
var buffer= new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
 var dup = new Buffer(bin.length) ;
 buffer.copy(dup) ;
 dup[0] = 0x48 ;
 console.log(buffer) ;  // <Buffer 68 65 6c 6c 6f>
 console.log(dup) ;  // <Buffer 48 65 65 6c 6f>

Pour résumer


(1), JavaScript convient au traitement des données codées Unicode, mais il n'est pas convivial pour le traitement des données binaires.

(2), donc lors du traitement de flux TCP ou de systèmes de fichiers, il est nécessaire de traiter des flux d'octets.

(3), Node dispose de plusieurs méthodes pour traiter, créer et consommer des flux d'octets.
(4), les données originales sont stockées dans une instance de Buffer. Un Buffer est similaire à un tableau d'entiers, mais sa mémoire est allouée en dehors de la pile V8. La taille d'un Buffer ne peut pas être modifiée.
(5), les types d'encodage traités sont : ascii, utf8, utf16le, ucs2 (alias de utf16le), base64, binaire, hex.
(6), Buffer est un élément global, et vous pouvez obtenir une instance de Buffer directement avec new Buffer().

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