美文网首页
Node.js之Stream理解

Node.js之Stream理解

作者: bo_bo_bo_la | 来源:发表于2018-01-23 20:26 被阅读38次

在nodejs中可以通过fs模块读写文件,上篇文章页简单介绍了一下fs的用法

  1. fs.readFile(filename,fn)
    异步读取文件,filename是要读取的文件名称,如果是相对路径,则通过当前进程执行的路径来查找文件。
    fn是回调函数,有两个参数
    第一个参数err(如果没有报错,该值为null),进行操作时,应先判断err是否有值。
    第二个参数是代表文件内容的Buffer实例。
  2. fs.writeFile(filename,content,[,encode],fn)
    异步写入文件,content是要写入的内容,encode为编码格式,默认是utf-8。
    既然有异步,自然也会有同步,在每个异步函数后面加上Sync。
    上面几个接口,无论是异步是同步,都是等文件读取完成才进行操作的。
    如果操作的文件是一些小文件,这种操作是没有问题。
    但是在服务器端,文件体积一般很大,用这种方式效率低,导致线程阻塞,甚至会因为内存不足而崩溃。
    所以就有了stream
    nodejs中Stream是EventEmitter的实现,你可以理解为程序后台打开了一个文件(不占用主线程)
    程序会一点点的读取(写入)文件
var fs = require('fs');
// 创建一个可读流
var readStream = fs.createReadStream('/path/to/source');
var writeStream = fs.createWriteStream('/path/to/dest');
 
readStream.on('data', function(chunk){
  // 可读流收到data事件时,将内容写入到可写流
  writeStream.write(chunk);
});
 
readStream.on('end', function(){
  // 当可读流读取完成,会发出end事件,这时我们要把可写流关闭
  writeStream.end();
});

当调用fs.createReadStream时,相当于创建一个文件读取流。
可以通过监听Data事件,来读取的部分数据,来进行一些操作。也可以用pipe的写法

var http = require("http");
var url = require("url");
var fs = require("fs");
var server = http.createServer(function (req,res) {
    var pathname = url.parse(req.url,true).pathname;
    if(pathname == "/" || pathname == "/index"){
        var rs = fs.createReadStream("./index.html");
        rs.pipe(res);
    }else if(pathname == "/goods"){
        var rs = fs.createReadStream("./goods.html");
        rs.pipe(res);
    }else if(pathname != "/favicon.ico"){
        var rs = fs.createReadStream("."+pathname);
        rs.pipe(res);
    }
})
server.listen(8787);

总结
通过上述例子,可以知道stream应该还拥有如何合并等更复杂的应用方式。总之整体上符合如下特性:

  • Stream分为readable、writeable
  • Stream通过pipe方法控制流向
  • httpServer和httpClient和flie system 和 process.stdin\out\err通常可以作为Stream
  • Stream可以被on转化为普通的变量,普通变量可以被write转换成Stream
  • Stream自身可以被拆分、合并、过滤

相关文章

  • Node.js之Stream理解

    在nodejs中可以通过fs模块读写文件,上篇文章页简单介绍了一下fs的用法 fs.readFile(filena...

  • Node.js 之 stream

    stream 也就是流,可以理解为一连串的字节像水流那样的存在。按照官方文档的解释: A stream is an...

  • Node.js学习笔记:Stream(流)

    概念 Stream模块 流(stream)在 Node.js 中是处理流数据的抽象接口(abstract inte...

  • 理解Node.js中的stream

    简介 主要对stream这个概念做一个形象的描述和理解,同时介绍一下比较常用的API。主要参考了Node.js的官...

  • NodeJs中的stream(流)- 基础篇

    一、什么是Stream(流) 流(stream)在 Node.js 中是处理流数据的抽象接口(abstract i...

  • 理解 Node.js 中的 Stream(流)

    接触过 Node.js 的开发人员可能知道,流(Stream)这个概念比较难理解,也不太好处理。 用 Domini...

  • Transform 流举例

    内置的Transform Stream 创建一个进度条pipe和加密 node.js stream文档英文链接[h...

  • node.js之stream模块

    stream 流是一个抽象接口,在 Node 里被不同的对象实现。例如 request to an HTTP se...

  • Node.js 之 Stream(流)

    Stream(流) Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发...

  • Node.js<四>

    Node.js Stream(流) Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对h...

网友评论

      本文标题:Node.js之Stream理解

      本文链接:https://www.haomeiwen.com/subject/ableaxtx.html