Node.js - Luồng
Luồng là gì?
Luồng 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 đến đích theo kiểu liên tục. Trong Node.js, có bốn loại luồng:
Readable - Luồng được sử dụng cho hoạt động đọc.
Writable - Luồng được sử dụng cho hoạt động ghi.
Duplex - Dòng có thể được sử dụng cho cả hoạt động đọ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 EventEmittervà 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 hiểu biết cơ bản về các thao tác thường được sử dụng trên Luồng.
Đọc từ một luồng
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 tệp js có tên là main.js với 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!!!!!
Ghi vào Luồng
Tạo tệp js có tên là main.js với 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 -
Simply Easy Learning
Piping the Streams
Đường ống là một cơ chế mà 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 ta 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 tệp js có tên là main.js với 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 -
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
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 này với một 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 ta 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ương tự.
Tạo tệp js có tên là main.js với 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 input.txt đã được nén và nó tạo ra một tệp input.txt.gz trong thư mục hiện tại. Bây giờ chúng ta hãy thử giải nén cùng một tệp bằng đoạn 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.