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])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。