Buffer et Stream Node.js : expérience pratique du backend Web

Tampon _

Le langage JavaScript lui-même n'a que des types de données chaîne, pas des types de données binaires.

Mais lorsqu'il s'agit de flux comme TCP ou de flux de fichiers, des données binaires doivent être utilisées. Par conséquent, dans Node.js, une classe Buffer est définie, qui est utilisée pour créer une zone tampon spécifiquement pour stocker les données binaires.

Dans Node.js, la classe Buffer est une bibliothèque principale livrée avec le noyau Node. La bibliothèque Buffer apporte un moyen de stocker des données brutes dans Node.js, permettant à Node.js de traiter des données binaires. Chaque fois que vous avez besoin de traiter des données déplacées lors d'opérations d'E/S dans Node.js, il est possible d'utiliser la bibliothèque Buffer. . Les données brutes sont stockées dans des instances de la classe Buffer. Un Buffer est similaire à un tableau d'entiers, mais il correspond à un morceau de mémoire brute en dehors de la mémoire tas V8.

  1. ascii - Seules les données ASCII 7 bits sont prises en charge. Cet encodage est très rapide si les bits forts sont supprimés.
  2. utf8 - Caractères Unicode codés sur plusieurs octets. De nombreuses pages Web et autres formats de documents utilisent UTF-8.
  3. utf16le - Caractère Unicode codé en petit-boutiste sur 2 ou 4 octets. Prend en charge les paires de substitution (U+10000 à U+10FFFF).
  4. ucs2 - Alias ​​​​pour utf16le.
  5. base64 - Codage base64 base64_Baidu Encyclopédie
  6. latin1 - Un moyen d'encoder un Buffer dans une chaîne codée sur un octet.
  7. binaire - Alias ​​​​pour latin1.
  8. hex - Encode chaque octet en deux caractères hexadécimaux.

[Expérience 1] Exécutez le programme suivant

Capture d'écran des résultats en cours d'exécution

Créer une classe Buffer

Buffer fournit l'API suivante pour créer des classes Buffer :

  1. Buffer.alloc(size[, fill[, encoding]]) : Renvoie une instance de Buffer de la taille spécifiée. Si fill n'est pas défini, elle sera remplie avec 0 par défaut.
  2. Buffer.allocUnsafe(size) : renvoie une instance Buffer de la taille spécifiée, mais elle ne sera pas initialisée, elle peut donc contenir des données sensibles
  3. Buffer.allocUnsafeSlow(taille)
  4. Buffer.from(array) : Renvoie une nouvelle instance de Buffer initialisée par la valeur du tableau (les éléments du tableau passés ne peuvent être que des nombres, sinon ils seront automatiquement écrasés par 0)
  5. Buffer.from(arrayBuffer[, byteOffset[, length]]) : renvoie un nouveau Buffer qui partage la même mémoire que l'ArrayBuffer donné.
  6. Buffer.from(buffer) : copie les données de l'instance Buffer entrante et renvoie une nouvelle instance Buffer
  7. Buffer.from(string[, encoding]) : Renvoie une nouvelle instance de Buffer initialisée par la valeur de string

[Expérience 2] Exécutez le programme suivant, affichez le contenu de buf1-6 et prenez une capture d'écran des résultats

tampon d'écriture

buf.write(string[, offset[, length]][, encoding])

Les paramètres sont décrits comme suit :

string - La chaîne à écrire dans le tampon.

offset - la valeur d'index où le tampon commence à être écrit, la valeur par défaut est 0.

length - le nombre d'octets écrits, par défaut buffer.length

encoding - l'encodage à utiliser. La valeur par défaut est « utf8 ».

valeur de retour

Renvoie la taille réelle écrite. Si l'espace tampon est insuffisant, seule une partie de la chaîne sera écrite.

[Expérience 3] Exécutez le code suivant :

Capture d'écran des résultats en cours d'exécution :

Lire les données du tampon

grammaire

La syntaxe de lecture des données du tampon de nœud est la suivante :

buf.toString([encodage[, début[, fin]]])

Les paramètres sont décrits comme suit

encoding - l'encodage à utiliser. La valeur par défaut est « utf8 ».

start - spécifie la position de l'index pour commencer la lecture, la valeur par défaut est 0.

end - la position de fin, par défaut à la fin du tampon.

valeur de retour

Décode les données du tampon et renvoie une chaîne en utilisant l'encodage spécifié.

[Expérience 4] Exécutez le code suivant

Capture d'écran des résultats en cours d'exécution : 

Convertir le tampon en objet JSON

【Expérience 5】 Exécutez le code

Capture d'écran des résultats en cours d'exécution :

 

fusion de tampons

grammaire

La syntaxe de la fusion des tampons de nœuds est la suivante :

Buffer.concat(liste[, longueur totale])

Les paramètres sont décrits comme suit

list - une liste de tableaux d'objets Buffer utilisés pour la fusion.

totalLength - spécifie la longueur totale des objets Buffer combinés.

valeur de retour

Renvoie un nouvel objet Buffer avec plusieurs membres fusionnés.

[Expérience 6] Exécutez le programme suivant :

Capture d'écran des résultats en cours d'exécution :

Flux Node.js ( flux)

Lire les données du flux

Créez un fichier input.txt avec le contenu suivant :

Département d'information et d'informatique, Collège Xinhua, Université de Ningxia : majeure en informatique et technologie

[Expérience 7] Exécutez le programme suivant

Capture d'écran des résultats en cours d'exécution :

flux d'écriture

[Expérience 8 ] Créez le fichier main.js, le code est le suivant :

Capture d'écran des résultats en cours d'exécution :

débit de tuyau

Les tuyaux fournissent un mécanisme allant d’un flux de sortie à un flux d’entrée. Habituellement, nous l'utilisons pour obtenir des données d'un flux et transmettre les données à un autre flux.

[Expérience 9] Créez le fichier input.txt avec le contenu suivant :

Département d'information et d'informatique, Collège Xinhua, Université de Ningxia : majeure en informatique et technologie

Exécutez le code suivant :

Capture d'écran des résultats en cours d'exécution :

La fonction de ce programme est :

Il peut traiter les fichiers plus efficacement et simplifier l'opération de copie de fichiers.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_57398221/article/details/124100191
conseillé
Classement