如何在Nodejs中将缓冲区转换为流

zha*_*jpn 11 buffer node.js

我遇到了一个关于在Nodejs中将缓冲区转换为流的问题.这是代码:

var fs = require('fs');
var b = Buffer([80,80,80,80]);
var readStream = fs.createReadStream({path:b});
Run Code Online (Sandbox Code Playgroud)

该代码引发异常:

TypeError: path must be a string or Buffer
Run Code Online (Sandbox Code Playgroud)

然而,Nodejs的文档说fs.createReadStream()可以接受Buffer.

fs.createReadStream(path [,options])
  path <string> | <缓冲区> | <URL>
  选项<string> | <对象>

有人可以回答这个问题吗?非常感谢!

аle*_*kyі 12

NodeJS 8+版本 将缓冲区转换为流

const { Readable } = require('stream');

/**
 * @param binary Buffer
 * returns readableInstanceStream Readable
 */
function bufferToStream(binary) {
    const readableInstanceStream = new Readable({
      read() {
        this.push(binary);
        this.push(null);
      }
    });

    return readableInstanceStream;

  }
Run Code Online (Sandbox Code Playgroud)

  • 您能否澄清一下,这里添加 `this.push(null);` 的原因是什么?如果我不添加它并仅使用“this.push(binary);”会发生什么?谢谢。 (4认同)
  • @迈克B。将 chunk 作为 null 传递表示流结束 (EOF),其行为与 Read.push(null) 相同,之后不能再写入任何数据。EOF 信号被放置在缓冲区的末尾,任何缓冲的数据仍将被刷新。 (2认同)

аle*_*kyі 9

节点 0.10 +

将缓冲区转换为流

var Readable = require('stream').Readable; 

function bufferToStream(buffer) { 
  var stream = new Readable();
  stream.push(buffer);
  stream.push(null);

  return stream;
}
Run Code Online (Sandbox Code Playgroud)