我该如何将node.js buffer转换为符合stream2接口的可读流?
我已经找到了这个答案和stream-buffers模块,但该模块基于stream1接口。
我该如何将node.js buffer转换为符合stream2接口的可读流?
我已经找到了这个答案和stream-buffers模块,但该模块基于stream1接口。
最简单的方法可能是创建一个新的PassThrough流实例,并将数据推送到其中。当您将其传输到其他流时,数据将从第一个流中提取出来。
var stream = require('stream');
// Initiate the source
var bufferStream = new stream.PassThrough();
// Write your buffer
bufferStream.end(Buffer.from('Test data.'));
// Pipe it to something else (i.e. stdout)
bufferStream.pipe(process.stdout)
正如natevw所建议的那样,使用stream.PassThrough
更加惯用,最后用缓冲区end
:
var buffer = new Buffer( 'foo' );
var bufferStream = new stream.PassThrough();
bufferStream.end( buffer );
bufferStream.pipe( process.stdout );
这也是在vinyl-fs中如何转换/管道化缓冲区的方法。
end
结束整个缓冲区?并且在此处 end
为什么跟在 pipe
后面? - Startecend(buffer)
就是 write(buffer)
加上 end()
。我会结束流,因为它不再需要了。在这里,end/pipe
的顺序并不重要,因为当有一些处理器处理数据事件时(如管道),PassThrough
才开始发出数据。 - morris4一种现代简单的方法,可在任何使用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);
var bufferStream = stream.PassThrough();
可以使代码后面的读者更清晰地理解意图呢? - natevwbufferStream.end()
。 - natevw