node.js使用stream模块实现自定义流示例_node.js

来源:脚本之家  责任编辑:小易  

你的C++返回指针是没用的,你需要在C++里面构造好一个node的Buffer,返回这个Buffer给node,node才可以使用。另外,你要把video stream给客户端的话,你需要一个media streaming serverwww.zgxue.com防采集请勿采集本网。

本文实例讲述了node.js使用stream模块实现自定义流。分享给大家供大家参考,具体如下:

异步的思维是js的特点,也是node高并发性能优势的原因之一,你从传统的同步语言过来可能不习惯,但是像我们这种从前端写js过来的人就自然得像说话一样,关键还是适应。熟悉之后可以用async,

有些时候我们需要自定义一些流,来操作特殊对象,node.js中为我们提供了一些基本流类。

node.js的api里面的stream.Readable和stream.Writable都是百抽象的度,你得看你回具体需要干什么,再完成你自己的Readable或者答Writable。比如fs里面createReadStream返回的是fs里面继承自

我们新创建的流类需要继承四个基本流类之一(stream.Writeable,stream.Readable,stream.Duplex,stream.Transform),并确保调用了父类构造函数。

开箱即用,Node.js 的SSL使用一组非常强大的密码算法。特别是,迪菲赫尔曼密钥交换和椭圆曲线算法是极其昂贵的。而且当你在默认配置中用了太多的对外SSL调用,Node.js的性能将从根本上得到削弱。为了得到

一、实现自定义的可读流

如何使用Readline 创建Readline实例 学习里面的接口方法 学习监听与处理Readline事件 创建Readline实例 readline.createInterface(options) 创建一个readline的接口实例.接受一个Object类型参数

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

你的C++返回指针是没用的,你需要在C++里面构造好一个node的Buffer,返回这个Buffer给node,node才可以使用。另外,你要把video stream给客户端的话,你需要一个media streaming server

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

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程序设计有所帮助。

buffer为数据缓冲对象,是一个类似数组结构的对象,可以通过指定开始写入的位置及写入的数据长度,往其中写入二进制数据stream是对buffer对象的高级封装,其操作的底层还是buffer对象,stream可以设置为可读、可写,或者即可读也可写,在nodejs中继承了EventEmitter接口,可以监听读入、写入的过程。具体实现有文件流,httpresponse等内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 快速了解node中的stream流是什么
  • node.js中你不可不精的stream(流)
  • 详解nodejs文件系统(fs)与流(stream)
  • node.js中流(stream)的使用方法示例
  • 深入nodejs中流(stream)的理解
  • nodejs stream 数据流使用手册
  • node.js中的流(stream)介绍
  • 说说node中的可读流和可写流的区别
  • 浅谈手写node可读流之流动模式
  • node.js中stream流中可读流和可写流的实现与使用方法实例分析
  • 浅谈express.js解析post数据类型的正确姿势
  • node.js使用mysql连接池的方法实例
  • node.js中的process.nexttick使用实例
  • nodejs与html5相结合实现拖拽多个文件上传到服务器的实现方法
  • express默认日志组件morgan的方法
  • 详解node.js异步处理的各种写法
  • node.js中的流(stream)介绍
  • node.js(express)中使用jcrop进行图片剪切上传功能
  • nodejs一个简单的文件服务器的创建方法
  • 使用node搭建自动发图文微博机器人的方法
  • node.js stream和buffer有什么区别
  • 使用Node.js 的优势和劣势都有哪些
  • 如何从字符串中的Node.js创建流
  • node.js中使用了emitter.once,但还是有多次触发的
  • Node.js 适合用来做 web 开发吗
  • node.js 不用文件怎么创建流?
  • 如何提高NODE.js中SSL服务的性能
  • node.js readline close怎样触发
  • node.js环境变量配置的express出错
  • node stream 怎么变成字符串
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础知识javascript类库表单特效广告代码网页特效黑客性质javascript技巧domnode.jsjs其它首页javascriptnode.js快速了解node中的stream流是什么node.js中你不可不精的stream(流)详解nodejs文件系统(fs)与流(stream)node.js中流(stream)的使用方法示例深入nodejs中流(stream)的理解nodejs stream 数据流使用手册node.js中的流(stream)介绍说说node中的可读流和可写流的区别浅谈手写node可读流之流动模式node.js中stream流中可读流和可写流的实现与使用方法实例分析浅谈express.js解析post数据类型的正确姿势node.js使用mysql连接池的方法实例node.js中的process.nexttick使用实例nodejs与html5相结合实现拖拽多个文件上传到服务器的实现方法express默认日志组件morgan的方法详解node.js异步处理的各种写法node.js中的流(stream)介绍node.js(express)中使用jcrop进行图片剪切上传功能nodejs一个简单的文件服务器的创建方法使用node搭建自动发图文微博机器人的方法一行命令搞定node.js 版本升级卸载安装node.js与npm过程详解node.js(安装,启动,测试)yarn的安装与使用详细介绍node.js+ajax实现获取http服务器nodejs中调用系统命令、shell脚本nodejs npm install全局安装和本nodejs基本语法和类型nodejs学习笔记之fs文件模块nodejs文件操作模块fs(file sys使用raygun对node.js应用进行错误处理的方node.js下自定义错误类型详解详解如何使用nvm管理node.js多版本node链接mongodb数据库的方法详解【阿里云在linux系统中搭建node.js开发环境的简单深入浅析node.js 事件循环、定时器和procnodejs实现爬虫抓取数据实例解析node通过npm写一个cli命令行工具快速使用node.js进行web开发详解在linux上用forever实现node.js项目自启动
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved