如何将缓冲区包装为stream2可读流?

时间:2013-04-16 13:41:35

标签: node.js node.js-stream

如何在使用stream2接口后将node.js缓冲区转换为可读流?

我已经找到了这个answer和stream-buffers模块,但是这个模块基于stream1接口。

4 个答案:

答案 0 :(得分:150)

最简单的方法可能是创建一个新的PassThrough流实例,然后简单地将数据推入其中。当您将其传输到其他流时,数据将从第一个流中拉出。

var stream = require('stream');

// Initiate the source
var bufferStream = new stream.PassThrough();

// Write your buffer
bufferStream.end(new Buffer('Test data.'));

// Pipe it to something else  (i.e. stdout)
bufferStream.pipe(process.stdout)

答案 1 :(得分:32)

正如natevw所建议的那样,使用stream.PassThroughend与缓冲区一起使用更为惯用:

var buffer = new Buffer( 'foo' );
var bufferStream = new stream.PassThrough();
bufferStream.end( buffer );
bufferStream.pipe( process.stdout );

这也是vinyl-fs中缓冲区转换/传输的方式。

答案 2 :(得分:14)

使用streamifier,您可以使用新流api将字符串和缓冲区转换为可读流。

答案 3 :(得分:1)

一种现代简单的方法,可以在任何使用fs.createReadStream()的地方使用,而无需首先将文件写入路径。

const {Duplex} = require('stream'); // Native Node Module 

function bufferToStream(myBuuffer) {
    let tmp = new Duplex();
    tmp.push(myBuuffer);
    tmp.push(null);
    return tmp;
}

const myReadableStream = bufferToStream(your_buffer);
  • myReadableStream可重复使用。
  • 缓冲区和流仅存在于内存中,而没有写入本地存储。
  • 当实际文件存储在某个云服务中并且我们的API充当中间人时,我经常使用这种方法。文件永远不会写入本地文件。
  • 我发现无论缓冲区(最大10 mb)还是接受可读流的目的地,这都是非常可靠的。较大的文件应实现