Najlepszy samouczek Node.js Stream (strumień) W 2024 r. W tym samouczku możesz dowiedzieć się Odczytu danych ze strumienia,zapis strumienia,przepływ Pipeline,Łańcuch Przepływ,

Node.js Stream (strumień)

Strumień jest abstrakcyjny interfejs Node posiada wiele obiektów implementować ten interfejs. Na przykład, serwer, który zainicjował żądanie żądanie HTTP obiektu jest Stream, jak i stdout (standardowe wyjście).

Node.js, Stream Istnieją cztery rodzaje strumienia:

  • Czytelny - Czytelny operacji.

  • Zapisywalny - operacje zapisu.

  • Bliźniak - operacje odczytu i zapisu.

  • Transform - eksploatacja dane mają być zapisane, a następnie odczytał wyniki.

Wszystkie obiekty są instancjami EventEmitter Stream. Typowe objawy to:

  • Dane - wyzwalany gdy dane czasu czytać.

  • end - bez wyzwalania dane bardziej czytelne.

  • Błąd - wyzwalane, gdy wystąpi błąd w recepcji i procesu pisania.

  • wykończenie - Uruchamiany, gdy wszystkie dane zostały zapisane do systemu bazowego.

Ten poradnik będzie wprowadzenie wspólnych operacji strumieniowych.


Odczytu danych ze strumienia

Tworzenie input.txt pliku, w sposób następujący:

本教程官网地址:www.w3write.com

Tworzenie main.js pliku, w sposób następujący:

var fs = require("fs");
var data = '';

// 创建可读流
var readerStream = fs.createReadStream('input.txt');

// 设置编码为 utf8。
readerStream.setEncoding('UTF8');

// 处理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function(){
   console.log(data);
});

readerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序执行完毕");

Powyższy kod jest wykonywany w następujący sposób:

程序执行完毕
本教程官网地址:www.w3write.com

zapis strumienia

Tworzenie main.js pliku, w sposób następujący:

var fs = require("fs");
var data = '本教程官网地址:www.w3write.com';

// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');

// 标记文件末尾
writerStream.end();

// 处理流事件 --> data, end, and error
writerStream.on('finish', function() {
    console.log("写入完成。");
});

writerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序执行完毕");

Powyższe dane programowe zostaną zapisane do zmiennej pliku danych Output.txt. Wyniki wykonanie kodu, są następujące:

$ node main.js 
程序执行完毕
写入完成。

Output.txt wyświetlić zawartość pliku:

$ cat output.txt 
本教程官网地址:www.w3write.com

przepływ Pipeline

Rurociąg zapewnia mechanizm dla strumienia wejściowego strumienia wyjściowego. Zwykle stosowany w celu uzyskania danych i przesyłanie danych do innego strumienia ze strumienia.

Jak widać na zdjęciu powyżej, porównano dokumenty wiadro wypełnione wodą, a woda jest treść dokumentów, dzięki czemu możemy podłączyć dwa wiadra wody z wiadra do drugiego wiadra z rury (rury), więc powoli realizowana procesie replikacji dużych plików.

Poniższe przykłady chcemy zapisać do innego pliku przez odczytanie zawartości pliku i jego zawartości.

Ustawianie input.txt dokumentu brzmi następująco:

本教程官网地址:www.w3write.com
管道流操作实例

Tworzenie main.js pliku, w sposób następujący:

var fs = require("fs");

// 创建一个可读流
var readerStream = fs.createReadStream('input.txt');

// 创建一个可写流
var writerStream = fs.createWriteStream('output.txt');

// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream);

console.log("程序执行完毕");

Wyniki wykonanie kodu, są następujące:

$ node main.js 
程序执行完毕

Output.txt wyświetlić zawartość pliku:

$ cat output.txt 
本教程官网地址:www.w3write.com
管道流操作实例

Łańcuch Przepływ

Łańcuch jest inny płynący potok i tworzenie wielu łańcuch Mechanizm operacyjny Strumienie podłączając wyjście. Strumień Chain zazwyczaj wykorzystywane do eksploatacji rurociągu.

Następnie są rury i łańcucha do kompresji i dekompresji plików.

Tworzenie compress.js pliku, w sposób następujący:

var fs = require("fs");
var zlib = require('zlib');

// 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('input.txt')
  .pipe(zlib.createGzip())
  .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("文件压缩完成。");

Wyniki wykonanie kodu, są następujące:

$ node compress.js 
文件压缩完成。

Po wykonaniu powyższej operacji, możemy zobaczyć bieżący katalog utworzony w ramach input.txt sprężonego input.txt.gz plików.

Następnie, niech rozpakować pliki, tworzyć decompress.js plik, co następuje:

var fs = require("fs");
var zlib = require('zlib');

// 解压 input.txt.gz 文件为 input.txt
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('input.txt'));
  
console.log("文件解压完成。");

Wyniki wykonanie kodu, są następujące:

$ node decompress.js 
文件解压完成。
Node.js Stream (strumień)
10/30