我有一个 fs.ReadStream 对象,它指向一个非常大的文件。现在我想从 ReadStream 中读取 8000 个字节,但内部缓冲区只有 6000 个字节。所以我的方法是读取这 6000 个字节并等待内部缓冲区再次填满,方法是使用 while 循环检查内部缓冲区长度是否不再为 0。
像这样的东西:
BinaryObject.prototype.read = function(length) {
var value;
// Check whether we have enough data in the internal buffer
if (this.stream._readableState.length < length) {
// Not enough data - read the full internal buffer to
// force the ReadStream to fill it again.
value = this.read(this.stream._readableState.length);
while (this.stream._readableState.length === 0) {
// Wait...?
}
// We should have some more data in the internal buffer
// here... Read the rest and add it to our `value` buffer
// ... something like this:
//
// value.push(this.stream.read(length - value.length))
// return value
} else {
value = this.stream.read(length);
this.stream.position += length;
return value;
}
};
问题是,缓冲区不再填充 - 脚本将在 while 循环中闲置。
做到这一点的最佳方法是什么?