nodejs读取文件为文件流,node.js 文件流写入

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: