Home Tutorial Nodejs Node.js – Bài 8: stream (luồng)

Node.js – Bài 8: stream (luồng)

12 min read
0
205

Stream là gì?

Stream là các đối tượng cho phép bạn đọc dữ liệu từ một nguồn hoặc ghi dữ liệu vào một đích một cách liên tục. Trong Node.js, có bốn loại stream –

  • Có thể đọc được – Luồng được sử dụng cho thao tác đọc.
  • Có thể ghi – Luồng được sử dụng cho thao tác ghi.
  • Song công – Luồng có thể được sử dụng cho cả thao tác đọc và ghi.
  • Transform − Một loại luồng song công trong đó đầu ra được tính toán dựa trên đầu vào.

Mỗi loại Luồng là một phiên bản EventEmitter và ném một số sự kiện vào các thời điểm khác nhau. Ví dụ: một số sự kiện thường được sử dụng là –

  • data  – Sự kiện này được kích hoạt khi có sẵn dữ liệu để đọc.
  • end – Sự kiện này được kích hoạt khi không còn dữ liệu để đọc.
  • error – Sự kiện này được kích hoạt khi có bất kỳ lỗi nào khi nhận hoặc ghi dữ liệu.
  • finish  – Sự kiện này được kích hoạt khi tất cả dữ liệu đã được chuyển sang hệ thống cơ bản.

Hướng dẫn này cung cấp kiến ​​thức cơ bản về các thao tác thường được sử dụng trên Luồng.

Đọc từ một Stream

Tạo một tệp văn bản có tên input.txt có nội dung sau:

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Tạo một tệp js có tên main.js với đoạn mã sau :

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

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Set the encoding to be utf8. 
readerStream.setEncoding('UTF8');

// Handle stream events --> 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("Program Ended");

Bây giờ hãy chạy main.js để xem kết quả :

$ node main.js

Xác minh đầu ra.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Viết cho một dòng

Tạo một tệp js có tên main.js với đoạn mã sau –

var fs = require("fs");
var data = 'Simply Easy Learning';

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Write the data to stream with encoding to be utf8
writerStream.write(data,'UTF8');

// Mark the end of file
writerStream.end();

// Handle stream events --> finish, and error
writerStream.on('finish', function() {
   console.log("Write completed.");
});

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

console.log("Program Ended");

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Program Ended
Write completed.

Bây giờ hãy mở output.txt được tạo trong thư mục hiện tại của bạn; nó phải chứa những điều sau đây –

Simply Easy Learning

Đường ống các luồng

Đường ống là một cơ chế trong đó chúng tôi cung cấp đầu ra của một luồng làm đầu vào cho một luồng khác. Nó thường được sử dụng để lấy dữ liệu từ một luồng và chuyển đầu ra của luồng đó sang luồng khác. Không có giới hạn về hoạt động đường ống. Bây giờ chúng tôi sẽ hiển thị một ví dụ về đường ống để đọc từ một tệp và ghi nó vào một tệp khác.

Tạo một tệp js có tên main.js với đoạn mã sau :

var fs = require("fs");

// Create a readable stream
var readerStream = fs.createReadStream('input.txt');

// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');

// Pipe the read and write operations
// read input.txt and write data to output.txt
readerStream.pipe(writerStream);

console.log("Program Ended");

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

Program Ended

Mở output.txt được tạo trong thư mục hiện tại của bạn; nó phải chứa những điều sau đây –

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Xâu chuỗi các luồng

Chuỗi là một cơ chế để kết nối đầu ra của một luồng với luồng khác và tạo ra một chuỗi hoạt động của nhiều luồng. Nó thường được sử dụng với các hoạt động đường ống. Bây giờ, chúng tôi sẽ sử dụng đường ống và chuỗi để nén một tệp trước tiên và sau đó giải nén tệp tương tự.

Tạo một tệp js có tên main.js với đoạn mã sau –

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

// Compress the file input.txt to input.txt.gz
fs.createReadStream('input.txt')
   .pipe(zlib.createGzip())
   .pipe(fs.createWriteStream('input.txt.gz'));
  
console.log("File Compressed.");

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

File Compressed.

Bạn sẽ thấy rằng input.txt đã được nén và nó đã tạo một tệp input.txt.gz trong thư mục hiện tại. Bây giờ, hãy thử giải nén cùng một tệp bằng mã sau –

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

// Decompress the file input.txt.gz to input.txt
fs.createReadStream('input.txt.gz')
   .pipe(zlib.createGunzip())
   .pipe(fs.createWriteStream('input.txt'));
  
console.log("File Decompressed.");

Bây giờ hãy chạy main.js để xem kết quả –

$ node main.js

Xác minh đầu ra.

File Decompressed.
Load More Related Articles
Load More By quangvu
  • Node.js – Bài 13: API RESTful

    Kiến trúc REST là gì? REST là viết tắt của REpresentational State Transfer. REST là kiến ​…
  • Node.js – Bài 11: Web Module

    Kiến trúc ứng dụng web Một ứng dụng Web thường được chia thành bốn lớp – Client  − L…
  • Node.js – Bài 10: Global Objects

    Các đối tượng toàn cầu của Node.js có bản chất toàn cầu và chúng có sẵn trong tất cả các m…
Load More In Nodejs

Check Also

Tự làm web chatGPT đơn giản cho phép dùng nhiều OpenAI key

Trong thời đại công nghệ phát triển như hiện nay, chatbot đang dần trở thành một giải pháp…