流模块基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流模块基础相关的知识,希望对你有一定的参考价值。

简介

在node中,一共有五种类型的流:readable,writable,transform,duplex以及‘classic‘。

无论哪一种流都会使用.pipe()方法实现输入和输出。

.pipe()函数接受一个源头src并将数据输出到一个可写的流dst中:

src.pipe(dst);

.pipe(dst)将会返回dst因此你可以链式调用多个流:

a.pipe(b).pipe(c).pipe(d);

 

readable流

readable流可以产生数据,你可以将这些数据传送到一个writable,transform后者duplex流中,只需要调用pipe()方法:

readableStream.pipe(dst);

创建一个readable流

var Readable = require(‘stream‘).readable;

var rs = new Readable;

rs.push(‘beep‘);

rs.push(‘boop\n‘);

rs.push(null);

 

rs.pipe(process.stdout);

rs.push(null)的作用是告诉rs输出数据应该结束了。

rs.push中的数据一直存在缓存中。

 

var Readable = require(‘stream‘).Readable;

var rs = Readable();

 

var c = 97;

rs._read = function(){

    rs.push(String.fromCharCode(c++));

    if(c > ‘z‘.charCodeAt(0)){

        rs.push(null);

    }

};

消耗一个readable流

大部分时候,将一个readable流直接pipe到另一个类型的流或者使用through或者concat-stream创建的流中,是一件很容易的事情。但是有时候我们也需要直接消耗一个readable流。

writable流

一个writable流指的是只能流进不能流出的流。

src.pipe(writableStream)

创建一个writable流

只需要定义一个._write(chunk.enc.next)函数,你就可以将一个readable流的数据释放到其中:

var writable = require(‘stream‘).writable;

var ws = writable();

ws._write = function(chunk,enc,next){

    console.dir(chunk);

    next();

};

向一个writable流中写东西

如果你需要一个writable流中写东西,只需要调用.write(data)即可。

为了告诉一个writable你已经写完毕,只需要调用.end()方法。你也可以使用.end(data)在结束前再写一些数据。

 

transform流

你可以将transform流想象成一个流的中间部分,它可以读也可以写,但是并不保存数据,它只负责处理流经它的数据。

 

duplex流

duplex流是一个可读也可写的流,就好像一个电话,可以接收也可以发送语音。

以上是关于流模块基础的主要内容,如果未能解决你的问题,请参考以下文章

python 全栈 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)

Python基础之读取基础配置模块封装

Python基础之读取基础配置模块封装

面试官:请讲一讲IO流核心模块与基本原理是什么?

导入节点模块时出现流错误“无法解析模块”

python控制流-导入模块