Latest web development tutorials

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.w3big.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.w3big.com

zapis strumienia

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

var fs = require("fs");
var data = '本教程官网地址:www.w3big.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.w3big.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.w3big.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.w3big.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 
文件解压完成。