面试题答案
一键面试暂停和恢复读取数据的实现方法及原理
在Node.js的可读流Readable
中,通过调用pause()
方法来暂停读取数据,调用resume()
方法来恢复读取数据。
原理:
pause()
方法会停止触发data
事件,并且暂停底层资源的读取操作。这使得数据不会继续流入缓冲区,从而可以控制数据的读取节奏。resume()
方法会重新开始触发data
事件,继续从底层资源读取数据,并将数据推送到缓冲区,然后通过data
事件进行分发。
简单代码示例
const fs = require('fs');
// 创建一个可读流
const readableStream = fs.createReadStream('example.txt');
// 监听data事件,处理读取到的数据
readableStream.on('data', (chunk) => {
console.log('Received chunk:', chunk.toString());
// 暂停读取
readableStream.pause();
console.log('Reading paused.');
// 设置一个定时器,模拟一些异步操作
setTimeout(() => {
// 恢复读取
readableStream.resume();
console.log('Reading resumed.');
}, 2000);
});
// 监听end事件,当读取结束时触发
readableStream.on('end', () => {
console.log('All data has been read.');
});
上述代码中,首先创建了一个可读流来读取文件example.txt
。当接收到数据块时,打印数据块并暂停读取,两秒后恢复读取。当所有数据读取完毕,触发end
事件并打印提示信息。