zoukankan      html  css  js  c++  java
  • 流模块基础

    简介

    在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 ');

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

  • 相关阅读:
    c3p0配置
    0624软件工程的回顾和总结
    0619学习进度条
    MySQL中wait_timeout的坑
    js/jquery禁止页面回退
    jquery打印页面(jquery.jqprint)
    input file multiple 批量上传文件
    Python学习笔记——Python Number(数字)
    正则表达式
    Python学习笔记(三)——条件语句、循环语句
  • 原文地址:https://www.cnblogs.com/yzpweber/p/6569107.html
Copyright © 2011-2022 走看看