NodeJS ReadStream一次不读取bufferSize字节

时间:2012-08-02 19:08:57

标签: node.js stream buffer

我有一个代码,NodeJS服务器读取文件并将其流式传输到响应,它看起来像:

var fStream = fs.createReadStream(filePath, {'bufferSize': 128 * 1024});
fStream.pipe(response);

问题是,Node一次只读取40960字节的文件。但是,如果一次读取131072(128 * 1024)字节,我的应用程序将更有效(由于不适用于此问题的原因)。

有没有办法强制Node一次读取128 * 1024字节?

2 个答案:

答案 0 :(得分:2)

我是新来的,所以忍受我......

我在节点的来源中找到了这个:

var toRead = Math.min(pool.length - pool.used, ~~this.bufferSize);

var kPoolSize = 40 * 1024;

因此,无论您提供什么,似乎缓冲区大小限制为40kb。您可以尝试更改代码中的值并重建节点。虽然......这可能不是一个非常可维护的解决方案。

答案 1 :(得分:1)

接受的答案是错误的。您可以使用 highWaterMark 选项强制节点一次读取(128 * 1024)字节。

var fStream = fs.createReadStream('/foo/bar', { highWaterMark: 128 * 1024 });

Documentation明确指出'可能缓冲的数据量取决于传递给流构造函数的highWaterMark选项。对于普通流,highWaterMark选项指定总字节数。对于在对象模式下运行的流,highWaterMark指定了对象的总数。'

另请参阅this。默认缓冲区大小为64 KiloBytes