扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这期内容当中小编将会给大家带来有关怎么在node.js中使用stream模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
创新互联是一家集网站建设,宁海企业网站建设,宁海品牌网站建设,网站定制,宁海网站建设报价,网络营销,网络优化,宁海网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。一、实现自定义的可读流
实现可读流需继承 stream.Readable,并实现 readable._read() 方法。
下面的代码我们实现了一个从数组中读取数据的流
const {Readable} = require('stream'); //这里我们自定义了一个用来读取数组的流 class ArrRead extends Readable { constructor(arr, opt) { //注意这里,需调用父类的构造函数 super(opt); this.arr = arr; this.index = 0; } //实现 _read() 方法 _read(size) { //如果当前下标等于数组长度,说明数据已经读完 if (this.index == this.arr.length) { this.push(null); } else { this.arr.slice(this.index, this.index + size).forEach((value) => { this.push(value.toString()); }); this.index += size; } } } let arr = new ArrRead([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], { highWaterMark: 2 }); //这样当我们监听 'data' 事件时,流会调用我们实现的 _read() 方法往缓冲区中读取数据 //然后提供给消费者 arr.on('data', function (data) { console.log(data.toString()); });
二、实现自定义的可写流
实现可写流必须继承 stream.Writeable ,并实现 writeable._write() 方法。writable._writev() 方法是可选的。
const {Writable} = require('stream'); //这里我们自定义了一个用来写入数组的流 class ArrWrite extends Writable { constructor(arr, opt) { super(opt); this.arr = arr; } //实现 _write() 方法 _write(chunk, encoding, callback) { this.arr.push(chunk.toString()); callback(); } } let data = []; let arr = new ArrWrite(data, { highWaterMark: 3 }); arr.write('1'); arr.write('2'); arr.write('3'); console.log(data);
三、实现自定义的可读可写流
可读可写流必须继承 stream.Duplex,并实现 readable._read() 和 writable._write() 方法。
const {Duplex} = require('stream'); //这里我们自定义了一个用来写读可写数组的流 class ArrReadWrite extends Duplex { constructor(arr, opt) { super(opt); this.arr = arr; this.index = 0; } //实现 _write() 方法 _write(chunk, encoding, callback) { this.arr.push(chunk.toString()); callback(); } //实现 _read() 方法 _read(size) { //如果当前下标等于数组长度,说明数据已经读完 if (this.index == this.arr.length) { this.push(null); } else { this.arr.slice(this.index, this.index + size).forEach((value) => { this.push(value.toString()); }); this.index += size; } } } let data = []; let arrWR = new ArrReadWrite(data, { highWaterMark: 3 }); //往流中写入数据 arrWR.write('1'); arrWR.write('2'); arrWR.write('3'); console.log(data); //往流中读取数据 console.log(arrWR.read(2).toString()); console.log(arrWR.read(2).toString());
四、自定义的转换流
转换流必须继承 stream.Transform,需实现 transform._transform() 方法。
const {Transform} = require('stream'); //这里我们自定义了一个用来转换数组的流 class Trans extends Transform { constructor(opt) { super(opt); } _transform(chunk, encoding, callback) { //将转换后的数据输出到可读流 this.push(chunk.toString().toUpperCase()); //参数一是Error对象 //参数二如果传入,会被转发到 readable.push() callback(); } } let t = new Trans({ highWaterMark: 3 }); t.on('data', function (data) { console.log(data.toString()); }); t.write('a'); t.write('b'); t.write('c');
转换流就是将读取到的数据做些计算然后输出。转换流既可以作为可读流,又可以作为可写流。
const {Transform} = require('stream'); //这里我们自定义了一个用来转换数组的流 class Trans extends Transform { constructor(opt) { super(opt); } _transform(chunk, encoding, callback) { //将转换后的数据输出到可读流 this.push(chunk.toString().toUpperCase()); //参数一是Error对象 //参数二如果传入,会被转发到 readable.push() callback(); } } let t = new Trans({ highWaterMark: 3 }); t.on('data', function (data) { console.log('data', data.toString()); }); //stdin.pipe(t) 表示将我们的标准输入写入到我的转换流 t 中,此时 t 是可写流。 //pipe(process.stdout) 表示将转换流 t 中的数据读取到标准输出中,此时 t 是可读流。 process.stdin.pipe(t).pipe(process.stdout);
上述就是小编为大家分享的怎么在node.js中使用stream模块了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联成都网站设计公司行业资讯频道。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流