码迷,mamicode.com
首页 > 其他好文 > 详细

流模块基础

时间:2017-03-17 23:37:20      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:tables   new   src   c++   不能   cat   种类   bsp   push   

简介

在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流是一个可读也可写的流,就好像一个电话,可以接收也可以发送语音。

流模块基础

标签:tables   new   src   c++   不能   cat   种类   bsp   push   

原文地址:http://www.cnblogs.com/yzpweber/p/6569107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!