介绍
这期内容当中小编将会给大家带来有关怎么在节点。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中使用流模块