9

ファイルをバッファに保存し、将来の使用のためにバッファをキャッシュします。ここで、バッファーを使用してストリームを作成し、それを再び応答にパイプできるようにします。これは可能ですか?もしそうなら、どのように?

4

2 に答える 2

2

felixge (ノード コミッター、esp ストリーム モジュール) https://github.com/felixge/node-combined-streamのおかげで、これが最も有望であることがわかりました 。

最初にファイルをバッファにパイプしてからストリームを構築し、std out を処理するようにパイプする例 (記事から変更)

(ファイル システム ストリームから直接パイプできます。これは説明用です)

ファイルからの非同期読み込みバッファ

var fs = require("fs");
var fileName = "image.jpg";

var CombinedStream = require('combined-stream');

var combinedStream = CombinedStream.create();

fs.exists(fileName, function(exists) {
  if (exists) {
    fs.stat(fileName, function(error, stats) {
      fs.open(fileName, "r", function(error, fd) {
        var buffer = new Buffer(stats.size);
        fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
             fs.close(fd);

           //even the file stream closed
           combinedStream.append(buffer);
           combinedStream.pipe(process.stdout);


        });
      });
    });
  }
});

ファイルから読み込みバッファを同期:

//get buffer
var buffer = readFileSync(fileName);
//or do it yourself
var stats = fs.statSync(fileName);
var buffer = new Buffer(stats.size);
var fd = fs.openSync(fileName,"r");
fs.readSync(fd,buffer,0,buffer.length,null);
fs.close(fd);

combinedStream.append(buffer);
combinedStream.pipe(process.stdout);
于 2013-08-01T11:20:12.710 に答える
1

これを行うためのノードのネイティブ機能はありません。サードパーティのライブラリがあるかどうかを少し調べてみてください。そうでない場合は、少し面倒ですが、それを行う独自のモジュールを作成することができます。これは、ドキュメントにリストされているすべてのメソッドとプロパティを実装Streamし、ドキュメンテーション、定義上、 でStreamあり、ノードの組み込み が使用できる場所ならどこでも使用Streamできます。

于 2012-10-13T06:42:35.073 に答える