readable.unshift(chunk[, encoding])
版本 | 变化 |
---|---|
v8.0.0 |
|
v0.9.11 | 添加于:v0.9.11 |
参数
chunk
<Buffer> | <Uint8Array> | <string> | <null> | <any> 要取消转移到读取队列的数据块。对于不在对象模式下运行的流,chunk
必须是字符串、Buffer
、Uint8Array
或null
。对于对象模式流,chunk
可以是任何 JavaScript 值。encoding
<string> 字符串块的编码。必须是有效的Buffer
编码,例如'utf8'
或'ascii'
。
将 chunk
传递为 null
表示流结束 (EOF),其行为与 readable.push(null)
相同,之后无法写入更多数据。 EOF 信号放在缓冲区的末尾,任何缓冲的数据仍将被刷新。
readable.unshift()
方法将一大块数据推回内部缓冲区。这在某些情况下很有用,其中流被代码消耗"un-consume" 一些已乐观地从源中提取的数据量,以便可以将数据传递给其他方。
stream.unshift(chunk)
方法在
事件发出后无法调用,否则将引发运行时错误。'end'
使用stream.unshift()
的开发人员通常应该考虑改用
流。有关详细信息,请参阅API for stream implementers 部分。Transform
// Pull off a header delimited by \n\n.
// Use unshift() if we get too much.
// Call the callback with (error, header, stream).
const { StringDecoder } = require('node:string_decoder');
function parseHeader(stream, callback) {
stream.on('error', callback);
stream.on('readable', onReadable);
const decoder = new StringDecoder('utf8');
let header = '';
function onReadable() {
let chunk;
while (null !== (chunk = stream.read())) {
const str = decoder.write(chunk);
if (str.includes('\n\n')) {
// Found the header boundary.
const split = str.split(/\n\n/);
header += split.shift();
const remaining = split.join('\n\n');
const buf = Buffer.from(remaining, 'utf8');
stream.removeListener('error', callback);
// Remove the 'readable' listener before unshifting.
stream.removeListener('readable', onReadable);
if (buf.length)
stream.unshift(buf);
// Now the body of the message can be read from the stream.
callback(null, header, stream);
return;
}
// Still reading the header.
header += str;
}
}
}
与
不同,stream.push(chunk)
stream.unshift(chunk)
不会通过重置流的内部读取状态来结束读取过程。如果在读取期间调用 readable.unshift()
(即从自定义流上的
实现中),这可能会导致意外结果。在使用立即 stream._read()
调用 stream.push('')
readable.unshift()
之后将适当地重置读取状态,但是最好在执行读取的过程中简单地避免调用 readable.unshift()
。
相关用法
- Node.js stream.Readable.unpipe([destination])用法及代码示例
- Node.js stream.Readable.take(limit[, options])用法及代码示例
- Node.js stream.Readable.pipe(destination[, options])用法及代码示例
- Node.js stream.Readable.setEncoding(encoding)用法及代码示例
- Node.js stream.Readable.some(fn[, options])用法及代码示例
- Node.js stream.Readable.map(fn[, options])用法及代码示例
- Node.js stream.Readable.toArray([options])用法及代码示例
- Node.js stream.Readable.isPaused()用法及代码示例
- Node.js stream.Readable.forEach(fn[, options])用法及代码示例
- Node.js stream.Readable.every(fn[, options])用法及代码示例
- Node.js stream.Readable.from()用法及代码示例
- Node.js stream.Readable.read([size])用法及代码示例
- Node.js stream.Readable.flatMap(fn[, options])用法及代码示例
- Node.js stream.Readable.filter(fn[, options])用法及代码示例
- Node.js stream.Readable.asIndexedPairs([options])用法及代码示例
- Node.js stream.Readable.drop(limit[, options])用法及代码示例
- Node.js stream.Readable.resume()用法及代码示例
- Node.js stream.Readable.reduce(fn[, initial[, options]])用法及代码示例
- Node.js stream.Readable.iterator([options])用法及代码示例
- Node.js stream.Readable.wrap(stream)用法及代码示例
- Node.js stream.Readable.find(fn[, options])用法及代码示例
- Node.js stream.Readable.pause()用法及代码示例
- Node.js stream.Readable.from(iterable[, options])用法及代码示例
- Node.js stream.Writable.uncork()用法及代码示例
- Node.js stream.finished()用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 stream.Readable.unshift(chunk[, encoding])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。