Node.js est un framework d'E/S asynchrones piloté par événements, qui peut être considéré comme l'environnement d'exécution de JavaScript sur le serveur. Il est largement utilisé pour ses caractéristiques d'E/S monothread, non bloquantes, pilotées par les événements et autres. Lors du traitement des flux de fichiers, afin d'éviter des problèmes tels que des caractères tronqués, l'encodage doit être défini.
Node.js gère les flux
Le flux de Node.js (Stream) est une interface abstraite qui peut être utilisée pour traiter de grandes collections de données. Les flux implémentent la transmission de données d'une manière similaire à celle d'un pipeline, divisant les données en morceaux à traiter, sans avoir à attendre que l'intégralité de la collection de données apparaisse avant de passer à l'étape suivante. Par conséquent, les flux peuvent réduire considérablement l’empreinte mémoire et le temps de traitement lors du traitement de grandes quantités de données ou de fichiers volumineux.
Node.js possède quatre objets de flux de base, à savoir Readable
, Writable
, Duplex
et Transform
. Parmi eux, les flux lisibles et inscriptibles sont les plus largement utilisés. Readable
、Writable
、Duplex
、Transform
。其中Readable和Writable流应用得最广。
Readable流可以理解为输入流,它把数据读入到Node.js中进行处理。Writable流是输出流,它把数据输出到目标位置。可以将两种流进行组合使用,例如管道(pipe),可以处理数据的传输。
Node.js流操作的过程中,可能会出现中文乱码的问题。这时我们需要设置编码解决该问题。
设置流编码
在Node.js中,流的编码是使用setEncoding()
方法来设定的。可对可读流和可写流进行编码设定。
例如,对一个可读流进行编码设定,如下所示:
const fs = require('fs'); const readableStream = fs.createReadStream('test.txt', 'utf8'); readableStream.setEncoding('utf8');
此时,可读流会按照编码类型将数据分段读取,并将分段数据输出。同样,对于可写流,也可以使用setEncoding()
方法来设定编码。例如:
const fs = require('fs'); const writableStream = fs.createWriteStream('output.txt', 'utf8'); writableStream.setEncoding('utf8');
需要注意的是,在Node.js V8.0.0版本之前,设置流编码只对字符串有效,如果想要读写二进制数据,则需要使用Buffer
对象。
因此,在读写非字符串数据时,若想使用编码,则需要在读写时将数据进行序列化和反序列化,如下所示:
const fs = require('fs'); const data = { name: 'Node.js' }; const str = JSON.stringify(data); const readableStream = fs.createReadStream('test.txt', 'binary'); const writableStream = fs.createWriteStream('output.txt', 'binary'); writableStream.write(new Buffer(str, 'utf8'));
这样,我们就可以在Node.js流的处理过程中,使用编码来避免乱码等问题。
总结
Node.js流处理非常适合处理大数据集和大文件的情景。在处理流数据时,要注意设定编码,避免出现中文乱码等问题。在Node.js V8.0.0版本之前,设置编码只对字符串有效,如需处理非字符串数据,需要使用Buffer
setEncoding()
. Les paramètres d'encodage peuvent être définis pour les flux lisibles et inscriptibles. 🎜🎜Par exemple, définissez l'encodage d'un flux lisible comme suit : 🎜rrreee🎜À ce moment, le flux lisible lira les données en segments en fonction du type d'encodage et affichera les données segmentées. De même, pour les flux inscriptibles, vous pouvez également utiliser la méthode setEncoding()
pour définir l'encodage. Par exemple : 🎜rrreee🎜Il est à noter qu'avant la version Node.js V8.0.0, la définition de l'encodage du flux n'est valable que pour les chaînes. Si vous souhaitez lire et écrire des données binaires, vous devez utiliser le Buffer.
objet. 🎜🎜Par conséquent, si vous souhaitez utiliser l'encodage lors de la lecture et de l'écriture de données non-chaînes, vous devez sérialiser et désérialiser les données lors de la lecture et de l'écriture, comme indiqué ci-dessous : 🎜rrreee🎜De cette façon, nous pouvons utiliser Node.js pendant Lors du traitement du flux, le codage est utilisé pour éviter des problèmes tels que des caractères tronqués. 🎜🎜Résumé🎜🎜Le traitement de flux Node.js est très approprié pour traiter de grands ensembles de données et des fichiers volumineux. Lors du traitement des données de flux, faites attention à définir le codage pour éviter des problèmes tels que des caractères chinois tronqués. Avant Node.js V8.0.0, la définition du codage n'était valide que pour les chaînes. Si vous devez traiter des données autres que des chaînes, vous devez utiliser l'objet Buffer
pour sérialiser et désérialiser les données. 🎜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!