怎么在node . js中使用流模块

  介绍

这期内容当中小编将会给大家带来有关怎么在节点。js中使用流模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>一、实现自定义的可读流

实现可读流需继承流。读,并实现readable._read()方法。

下面的代码我们实现了一个从数组中读取数据的流

const {可读性},=,要求(& # 39;流# 39;);//这里我们自定义了一个用来读取数组的流   class  ArrRead  extends  Readable  {   构造函数才能(加勒比海盗,,选择),{   ,,,//注意这里,需调用父类的构造函数   ,,,超级(选择);   ,,,this.arr =,加勒比海盗;   ,,,this.index =, 0;   ,,}//才能实现,_read(),方法   _read才能(大小),{   ,,,//如果当前下标等于数组长度,说明数据已经读完   ,,,if  (this.index ==, this.arr.length), {   ,,,,,this.push(空);   ,,,},{else    ,,,,,this.arr.slice (this.index, this.index  +,大小).forEach((价值),=祝辞,{   ,,,,,,,this.push (value.toString ());   ,,,,,});   ,,,,,this.index  +=,大小;   ,,,}   ,,}   }   let  arr =, new  ArrRead ([1, 2, 3, 4, 5, 6, 7, 8, 9, 0],, {   highWaterMark才能:2   });//这样当我们监听,& # 39;数据# 39;,事件时,流会调用我们实现的,_read(),方法往缓冲区中读取数据//然后提供给消费者   arr.on(& # 39;数据# 39;,,function (数据),{   console.log才能(data.toString ());   });

<强>二,实现自定义的可写流

实现可写流必须继承流。可写,并实现writeable._write()方法.writable._writev()方法是可选的。

const {可写},=,要求(& # 39;流# 39;);//这里我们自定义了一个用来写入数组的流   class  ArrWrite  extends  Writable  {   构造函数才能(加勒比海盗,,选择),{   ,,,超级(选择);   ,,,this.arr =,加勒比海盗;   ,,}//才能实现,_write(),方法   _write才能(块,编码,,回调),{   ,,,this.arr.push (chunk.toString ());   ,,,回调();   ,,}   }   let  data =, [];   let  arr =, new  ArrWrite(数据,,{   highWaterMark才能:3   });   arr.write (& # 39; 1 & # 39;);   arr.write (& # 39; 2 & # 39;);   arr.write (& # 39; 3 & # 39;);   console.log(数据);

<强>三,实现自定义的可读可写流

可读可写流必须继承流。双工,并实现readable._read()和writable._write()方法。

const {双},=,要求(& # 39;流# 39;);//这里我们自定义了一个用来写读可写数组的流   class  ArrReadWrite  extends  Duplex  {   构造函数才能(加勒比海盗,,选择),{   ,,,超级(选择);   ,,,this.arr =,加勒比海盗;   ,,,this.index =, 0;   ,,}//才能实现,_write(),方法   _write才能(块,编码,,回调),{   ,,,this.arr.push (chunk.toString ());   ,,,回调();   ,,}//才能实现,_read(),方法   _read才能(大小),{   ,,,//如果当前下标等于数组长度,说明数据已经读完   ,,,if  (this.index ==, this.arr.length), {   ,,,,,this.push(空);   ,,,},{else    ,,,,,this.arr.slice (this.index, this.index  +,大小).forEach((价值),=祝辞,{   ,,,,,,,this.push (value.toString ());   ,,,,,});   ,,,,,this.index  +=,大小;   ,,,}   ,,}   }   let  data =, [];   let  arrWR =, new  ArrReadWrite(数据,,{   highWaterMark才能:3   });//往流中写入数据   arrWR.write (& # 39; 1 & # 39;);   arrWR.write (& # 39; 2 & # 39;);   arrWR.write (& # 39; 3 & # 39;);   console.log(数据);//往流中读取数据   console.log (arrWR.read (2) .toString ());   console.log (arrWR.read (2) .toString ());

<强>四、自定义的转换流

转换流必须继承流。变换,需实现transform._transform()方法。

const }{变换,=,要求(& # 39;流# 39;);//这里我们自定义了一个用来转换数组的流   class  Trans  extends  Transform  {   构造函数才能(选择),{   ,,,超级(选择);   ,,}   _transform才能(块,编码,,回调),{   ,,,//将转换后的数据输出到可读流   ,,,this.push (chunk.toString () .toUpperCase ());   ,,,//参数一是错误的对象   ,,,//参数二如果传入,会被转发到,readable.push ()   ,,,回调();   ,,}   }   let  t =, new 反式({   highWaterMark才能:3   });   t.on(& # 39;数据# 39;,,function (数据),{   console.log才能(data.toString ());   });   t.write(& # 39;一个# 39;);   t.write (& # 39; b # 39;);   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在node . js中使用流模块