node . js中流流中可读流和可写流的实现与使用方法实例分析

  

本文实例讲述了node . js中流流中可读流和可写流的实现与使用方法。分享给大家供大家参考,具体如下:

  

节点。js中的流流是处理流式数据的抽象接口.node。js提供了很多流对象,像http中的请求和响应,和过程。stdout都是流的实例。

  

流可以是可读的,可写的,或是可读可写的。所有流都是事件的实例。

  

<强>一、流的类型

  

node . js中有四种基本流类型:

  

1,可写可写流(例:fs.createWriteStream ())

  

2,可读可读流(例:fs.createReadStream ())

  

3,双工可读又可写流(例:净。套接字)

  

4,变换读写过程中可修改或转换数据的双相流(例:zlib.createDeflate ())

  

<强>二、流中的数据有两种模式

  

1,二进制模式,都是字符串字符串,和缓冲区。

  

2,对象模式,流内部处理的是一系统普通对象。

  

<强>三,可读流的两种模式

  

1,流动模式(流动),数据自动从系统底层读取,并通过事件,尽可能快地提供给应用程序。

  

2,暂停模式(停顿了一下),必须显式的调用读()读取数据。

  

可读流都开始于暂停模式,可以通过如下方法切换到流动模式:

  

1,添加‘数据’事件回调。

  

2,调用简历()。

  

3,调用管()。

  

可读流通过如下方法切换回暂停模式:

  

1,如果没有管道目标,调用暂停()。

  

2,如果有管道目标,移除所有管道目标,调用unpipe()移除多个管道目标。

  

<强>四,创建可读流,并监听事件

        const fs=要求(fs);//创建一个文件可读流   让rs=fs.createReadStream (’。/1。txt”, {//文件系统标志   国旗:‘r’,//数据编码,如果调置了该参数,则读取的数据会自动解析//如果没调置,则读取的数据会是缓冲区//也可以通过rs.setEncoding()进行设置   编码:“use utf8”,//文件描述符,默认为null   fd:空,//文件权限   模式:0 o666,//文件读取的开始位置   开始:0,//文件读取的结束位置(包括结束位置)   结束:无穷,//读取缓冲区的大小,默认64 k   highWaterMark: 3   });//文件被打开时触发   rs.on(“开放”,函数(){   console.log(“文件打开的);   });//监听数据事件,会让当前流切换到流动模式//当流中将数据传给消费者后触发//由于我们在上面配置了highWaterMark为3字节,所以下面会打印多次。   rs.on(“数据”功能(数据){   console.log(数据);   });//流中没有数据可供消费者时触发   rs.on(“结束”,函数(){   console.log(“数据读取完毕”);   });//读取数据出错时触发   rs.on(“错误”,函数(){   console.log('读取错误的);   });//当文件被关闭时触发   rs.on(“关闭”,函数(){   console.log(“文件关闭”);   });      之前      

注意,“开放”和“关闭”事件并不是所有流都会触发。

  

当们监听‘数据’事件后,系统会尽可能快的读取出数据。但有时候,我们需要暂停一下流的读取,操作其他事情。

  

这时候就需要用简历到暂停()和()方法。

        const fs=要求(fs);//创建一个文件可读流   让rs=fs.createReadStream (’。/1。txt”, {   highWaterMark: 3   });   rs.on(“数据”功能(数据){   控制台。日志(“读取了${数据。长度}字节数据:$ {data.toString ()}”);//使流动模式的流停止触发“数据”事件,切换出流动模式,数据都会保留在内部缓存中。   rs.pause ();//等待3秒后,再恢复触发“数据”事件,将流切换回流动模式。   setTimeout(函数(){   rs.resume ();   },3000);   });      之前      

可读流的“可读性”事件,当流中有数据可供读取时就触发。

  

注意当监听“可读性”事件后,会导致流停止流动,需调用读()方法读取数据。

  

注意>   const fs=要求(fs);   让rs=fs.createReadStream (’。/1。txt”, {   highWaterMark: 1   });//当流中有数据可供读取时就触发   rs.on(“可读”,函数(){   让数据;//循环读取数据//参数表示要读取的字节数//如果可读的数据不足字节数,则返回缓冲区剩余数据//如是没有指定字节数,则返回缓冲区中所有数据   而(data=https://www.yisu.com/zixun/rs.read ()) {   控制台。日志(“读取到${数据。长度}字节数据的);   console.log (data.toString ());   }   });      

node . js中流流中可读流和可写流的实现与使用方法实例分析