nodejs读取文件为文件流,node.js 文件流写入
本文给大家分析一下Nodejs中的文件流程,希望对你有所帮助!
node.js速度课程简介:进入学习
文件流
由于电脑中各种介质的读取存储速度和容量不同,在操作过程中,一方可能会出现长时间的等待状态。
档案主要有三种,分别是输入流(Readable),输出流(Writeable),双工流(Duplex)。还有一种流不常用,就是Transform stream。
节点中提供了流模块。这个模块中有两个类实例:可读的和可写的。这两个类都会在流中被继承,所以会有很多通用的方法等等。
可读流(Readable)
输入流:数据从源流向内存,磁盘中的数据转移到内存。
createReadStream
fs.createReadStream(路径,配置)
在配置中,有:编码,开始,结束和高水印。
HighWaterMark:如果编码有值,数字代表一个字符数;如果编码为null,则该数字表示字节数。
返回可读的ReadStream的子类
注册事件
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(数据);
Console.log(文件正在读取);
})
readable.on(end ,()={
Console.log(“文件读取完成”);
})暂停读取
Readable.pause()暂停阅读并触发暂停事件。
恢复读取
Readable.resume()恢复读取,这将触发resume事件。
可写流
ws.write(data)
写一个数据,可以做一个字符串或者缓冲区,返回一个布尔值。
如果返回true,说明写通道未满,可以直接写下一个数据。写入通道的大小由配置中的highWaterMark指示。
如果返回false,则表示写通道已满,其余字符开始等待,产生反压。
const ws=fs.createWriteStream(文件名,{
编码:“utf-8”,
高水位线:2
})
const flag=ws . write( Liu );
console . log(flag);//假
虽然它只会执行一次,但是当通道中有空闲空间时,它会继续写入,而不是返回值。
Ws.write()将只返回值一次。
const flag=ws . write( a );
console . log(flag);
const flag 1=ws . write( a );
console . log(flag 1);
const flag 2=ws . write( a );
console . log(flag 2);
const flag 3=ws . write( a );
console . log(flag 3);
输出顺序:真、假、假、假
第二次写已经占用了两个字节,第三次写直接占用了,所以返回false使用流复制粘贴文件,解决背压问题。
const filename=path . resolve(_ _ dirname,。/file/write . txt );
const ws filename=path . resolve(_ _ dirname,。/file/write copy . txt );
const ws=fs . createwritestream(ws filename);
const rs=fs.createReadStream(文件名)
rs.on(data ,chumk={
const falg=ws . write(chumk);
如果(!falg) {
RS . pause();
}
})
ws.on(drain ,()={
RS . resume();
})
rs.on(close ,()={
ws . end();
console.log(复制结束);
})pipe
Pipe还可以直接串联可读流和写流,还可以解决背压问题。
rs .管道(ws);
rs.on(close ,()={
ws . end();
console.log(复制结束);
})学了之后觉得file stream在读写大量文件的时候非常方便,可以做到快速高效。与writeFile和readFile相比,效率要高得多,处理正确也不会出现大的堵塞。
更多关于node的信息,请访问:nodejs教程!以上是对node.js中文件流细节的深入分析请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。