Nodejs中的文件流怎样理解,有什么好处?
Admin 2022-01-21 群英技术资讯 792 次浏览
这篇文章我们来了解Nodejs中的文件流,有很多新手对用户Nodejs中的文件流不是很理解的,对此下文给大家来详细的介绍一下,感兴趣的朋友不妨了解看看,对大家会有一定的帮助,那么接下来就跟随小编来一起学习一下吧!

由于电脑中的各种介质读存的速度不同、容量大小不同,因此可能在操作中会有一方存在长期等待的状态
文件流主要有三种,分别为输入流(Readable)、输出流(Writeable)、双工流(Duplex)。其中还有一种流不常用那就是 转换流(Transform)
在 node 中提供了 stream 模块,这个模块中有两个类实例:Readable 和 Writable,流中都会继承这两个类,因此会有很多共同的方法等。
输入流:数据从源头流向内存,把磁盘里面的数据传输到内存里面。
fs.createReadStream(路径, 配置)
在配置里面有:encoding(编码方式)、start(起始读取字节)、end(结束读取字节)、highWaterMark(每次读取量)
highWaterMark:如果encoding有值,该数量表示一个字符数;如果encoding为null,该数量表示字节数
返回一个Readable的子类ReadStream
const readable = fs.createReadStream(filename, { encoding: 'utf-8', start: 1, end: 2, // highWaterMark: });
注册事件
readable.on(事件名,处理函数)
readable.on('open', (err, data)=> {
// console.log(err);
console.log('文件打开了');
})
readable.on('error', (data, err) => {
console.log(data, err);
console.log('读取文件发生错误');
})
readable.on('close', (data, err) => {
// console.log(data, err);
console.log('文件关闭');
})
readable.close() // 手动触发通过 readable.close()或者在文件读取完毕之后自动关闭--autoClose配置项默认为 true
readable.on('data', (data) => {
console.log(data);
console.log('文件正在读取');
})
readable.on('end', ()=>{
console.log('文件读取完毕');
})暂停读取
readable.pause() 暂停读取,会触发 pause 事件
恢复读取
readable.resume() 恢复读取,会触发 resume 事件
const ws = fs.createWriteStream(filename[, 配置])
写入一个数据,data 可以使字符串也可以是Buffer,返回一个布尔值。
如果返回的是 true 表示写入通道没有被占满,接下来的数据可以直接写入,写入通道就是配置中的 highWaterMark 表示的大小。
如果返回的是false 表示写入通道占满,其余字符开始等待,出现背压情况。
const ws = fs.createWriteStream(filename, {
encoding: 'utf-8',
highWaterMark: 2
})
const flag = ws.write('刘');
console.log(flag); // false
这里虽然只会执行一次,但是在通道有空余空间的时候就会继续写入,并不在返回 值。
ws.write() 只会返回一次值。
const flag = ws.write('a');
console.log(flag);
const flag1 = ws.write('a');
console.log(flag1);
const flag2 = ws.write('a');
console.log(flag2);
const flag3 = ws.write('a');
console.log(flag3);
输出顺序:true、false、false、false
第二次写入的时候已经占了两字节,第三次写入后直接占满了,所以返回false使用流复制粘贴文件,并解决背压问题
const filename = path.resolve(__dirname, './file/write.txt');
const wsfilename = path.resolve(__dirname, './file/writecopy.txt');
const ws = fs.createWriteStream(wsfilename);
const rs = fs.createReadStream(filename)
rs.on('data', chumk => {
const falg = ws.write(chumk);
if(!falg) {
rs.pause();
}
})
ws.on('drain', () => {
rs.resume();
})
rs.on('close', () => {
ws.end();
console.log('copy end');
})pipe
使用 pipe 也可以直接将 可读流 和 写入流串联起来,也可以解决背压问题
rs.pipe(ws);
rs.on('close', () => {
ws.end();
console.log('copy end');
}) 现在大家对Nodejs中的文件流应该有所了解了吧,文件流在大量文件读写的时候是很方便的,并且可以做到快速高效,相比于writeFile和readFile效率要高很多,正确处理也不会有很大的阻塞出现。最后,想要了解更多大家可以关注群英网络其它相关文章。
文本转载自PHP中文网
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于javascript的相关知识,其中主要整理了异步与回调的基本概念的相关问题,同步,一般指按照预定的顺序依次执行任务,只有当上一个任务完成后,才开始执行下一个任务,异步,与同步相对应,异步指的是让CPU暂时搁置当前任务,先处理下一个任务,当收到上个任务的回调通知后,再返回上个任务继续执行,下面一起来看一下,希望对大家有帮助。
本篇文章介绍了几个javascript的基本语法和maven的配置教程。想学习javascript和maven的朋友们可以参考一下,希望能给你带来帮助
目录前言ThreeJS 基础——实现转动的球体ThreeJS 纹理——实现转动的地球交互式雪糕地球添加 loading 效果前言最近的天气有几分酷热,去实验室的道路也有几分漫长,走着走着,小包感觉灵魂已经被热出窍了。回到实验室,把空调打开,雪糕吃上,静坐了几分钟,才重新感觉到灵魂的滋味,葛优躺在实验室的小床上,思维开始
JS怎样实现一个网页音乐播放器功能?之前我们了解了用vue.js实现简单的播放器,今天我们来用JavaScript来实现更复杂一些的功能的音乐播放器,实现步骤、代码及效果如下,感兴趣的朋友可以了解看看。
这篇文章主要为大家详细介绍了JavaScript实现简单计算器小功能,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,大家可以在本篇实例中查缺补漏,提升水平
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008