Nodejs-streams
Node.js-ストリーム
ストリームとは何ですか?
ストリームは、ソースからデータを読み取ったり、宛先にデータを連続的に書き込んだりできるオブジェクトです。 Node.jsでは、4種類のストリームがあります-
- Readable -読み取り操作に使用されるストリーム。
- Writable -書き込み操作に使用されるストリーム。
- Duplex -読み取りと書き込みの両方の操作に使用できるストリーム。
- Transform -出力が入力に基づいて計算されるデュプレックスストリームのタイプ。
Streamの各タイプは EventEmitter インスタンスであり、異なるインスタンスで複数のイベントをスローします。 たとえば、一般的に使用されるイベントのいくつかは-
- data -読み取り可能なデータがある場合にこのイベントが発生します。
- 終了-このイベントは、読み取るデータがなくなると発生します。
- エラー-このイベントは、データの受信または書き込みでエラーが発生したときに発生します。
- finish -すべてのデータが基になるシステムにフラッシュされると、このイベントが発生します。
このチュートリアルは、Streamsで一般的に使用される操作の基本的な理解を提供します。
ストリームからの読み取り
次の内容を持つinput.txtという名前のテキストファイルを作成します-
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
次のコードでmain.jsという名前のjsファイルを作成します-
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");
次に、main.jsを実行して結果を確認します-
$ node main.js
出力を確認します。
Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
ストリームへの書き込み
次のコードでmain.jsという名前のjsファイルを作成します-
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");
次に、main.jsを実行して結果を確認します-
$ node main.js
出力を確認します。
Program Ended
Write completed.
現在のディレクトリに作成されたoutput.txtを開きます。それは次を含む必要があります-
Simply Easy Learning
ストリームのパイピング
パイピングは、あるストリームの出力を別のストリームへの入力として提供するメカニズムです。 通常、あるストリームからデータを取得し、そのストリームの出力を別のストリームに渡すために使用されます。 配管操作に制限はありません。 次に、あるファイルから読み取り、別のファイルに書き込むためのパイピングの例を示します。
次のコードでmain.jsという名前のjsファイルを作成します-
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");
次に、main.jsを実行して結果を確認します-
$ node main.js
出力を確認します。
Program Ended
現在のディレクトリに作成されたoutput.txtを開きます。それは次を含む必要があります-
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
ストリームの連鎖
チェーンは、1つのストリームの出力を別のストリームに接続し、複数のストリーム操作のチェーンを作成するメカニズムです。 通常、配管操作で使用されます。 次に、パイピングとチェーンを使用して、最初にファイルを圧縮し、次に同じファイルを解凍します。
次のコードでmain.jsという名前のjsファイルを作成します-
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.");
次に、main.jsを実行して結果を確認します-
$ node main.js
出力を確認します。
File Compressed.
input.txtが圧縮され、現在のディレクトリにinput.txt.gzファイルが作成されていることがわかります。 今、次のコードを使用して同じファイルを解凍してみましょう-
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.");
次に、main.jsを実行して結果を確認します-
$ node main.js
出力を確認します。
File Decompressed.