情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでストリームの全てのデータを纏めて取得する

ストリームの全てのデータを纏めて取得するにはconcat-streamモジュールのconcatStream関数を使用します。

var concatStream = require('concat-stream');

var writable = concatStream({
    encoding: 'xxx'
}, function (data) {
});

第1引数にオプションをオブジェクトとして指定します。

主なオプションには下のようなものがあります。

  • encoding・・・ストリームのデータの種類を指定します。データの種類に応じて下のような値を指定します。このオプションを指定しなかった場合にはストリームの最初のデータの種類がストリームのデータの種類となります。
    • string・・・文字列です。
    • buffer・・・バッファです。
    • array・・・バイト配列です。
    • uint8array・・・Uint8Arrayクラスのインスタンスです。
    • u8・・・uint8arrayと同じです。
    • uint8・・・uint8arrayと同じです。
    • object・・・オブジェクトです。

第2引数にストリームへのデータの書き込みが完了した時に呼び出される関数を指定します。この関数の第1引数はストリームの全てのデータです。

返り値として書き込みストリームが得られます。

そのため、このストリームのwritable.write関数を使用してストリームにデータを書き込んだり、writable.end関数を使用してストリームへのデータの書き込みを完了したりすることができます。

writable.write('xxx');
writable.end();

また、読み込みストリームのreadable.pipe関数を使用して読み込みストリームをこのストリームに接続することもできます。

readale.pipe(writable);

サンプルコード1

concat-stream-1.js

var concatStream = require('concat-stream');

var writable = concatStream(function (data) {
    console.log(data);
});
writable.on('error', function (err) {
    console.error(err);
    process.exit(1);
});

writable.write('foo ');
writable.write('bar ');
writable.write('baz ');
writable.end();

使用パッケージ

  • concat-stream
    npm install concat-streamでインストールします。

実行結果

C:\work\node>node concat-stream-1.js
foo bar baz

サンプルコード2

3つ目のコマンドライン引数として与えられたテキストファイルのデータをストリームを使用して読み込み、標準出力に出力します。

concat-stream-2.js

var fs = require('fs');
var concatStream = require('concat-stream');

if (process.argv.length < 3) {
    console.error('lack argument.');
    process.exit(1);
}

try {
    var rs = fs.createReadStream(process.argv[2], 'utf-8');
    rs.on('error', function (err) {
        console.error(err);
        process.exit(1);
    });
    var writable = concatStream(function (data) {
        console.log(data);
    });
    writable.on('error', function (err) {
        console.error(err);
        process.exit(1);
    });
    rs.pipe(writable);
}
catch (err) {
    console.error(err);
    process.exit(1);
}

使用パッケージ

  • concat-stream
    npm install concat-streamでインストールします。

実行結果

現在のフォルダにはtextfile.txtという名称のテキストファイルが存在しています(文字コードはUTF-8です)。

C:\work\node>type textfile.txt
これはテキストファイルの内容です。

このテキストファイルを3つ目のコマンドライン引数に指定してコードを実行すると正しく内容が出力されます。

C:\work\node>node concat-stream-2.js textfile.txt
これはテキストファイルの内容です。

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js