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.