node中的流的介绍(Stream)

Stream是一个抽象接口,Node中有很多对象实现了这个接口。例如,对http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)。

Node.js,Stream有四种流类型:

  • Readable--可读操作。
  • Writable--可写操作。
  • Duplex--可读可写操作。
  • Transform--操作被写入数据,然后读出结果。


所有的Stream对象都是EventEmitter的实列。常用的事件有:

  • data--当有数据可读时触发。
  • end--没有更多的数据可读时触发。
  • error--在接收和写入过程中发生错误时触发。
  • finish--所有数据已被写入到底层系统时触发。


1、Readable


以fs为例创建一个可读流:

fs.createReadStream(path,[options]);

  • path --- 要读取文件的路径
  • options --- 一个数组对象包含:

                  flags:指定用什么模式打开,“w”代表写,“r”代表读。

                  endoding:编码格式“utf8","ascii","base64"三种格式,默认“utf8”。

                  highWaterMark:水位线

                  autoClose:为true时(默认行为),对错误或结束的文件描述符将自动关闭,为                 false时,文件描述符将不会被关闭,即使他们报错了。

                 start:开始读取的字节位置

                 end:结束读取的字节位置。

创建一个1.txt文件,内容:asdfasd

同一目录下创建一个js文件

let fs = require("fs");
let path = require("path");
let readable = fs.createReadStream(path.join(__dirname,"./1.txt"),{
    flags: 'r',
    encoding: 'utf8',
    autoClose: true,
    mode: "0666",
});
readable.on('data', function(chunk){
    console.log( chunk.length, chunk);
});
//7 'asdfasd'复制代码

可读的流有两种模式:

流动模式:数据会自动从来源流出,直到来源数据耗尽。

暂停模式:你得通过stream.read()主动去要数据,不要数据就一直等在那。


可读流在创建时都是暂停模式。暂停模式和流动模式可以相互转换。


2、Writable

例如:

let fs = require("fs");
let path = require("path");
let writable = fs.createWriteStream(path.join(__dirname,"./1.txt"),{
    flags: 'w',
    encoding: 'utf8',
    autoClose: true,
    mode: "0666",
});
writable.on('finish', function(){
    console.log('写入完成');
    process.exit(0);
});
writable.write('node修炼中...', 'utf8');
writable.end();
//写入完成复制代码

3、Duplex


4、Transform

变换流的实例包括:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值