node.js基础 Stream流

来源:互联网 发布:js正则表达式空格 编辑:程序博客网 时间:2024/06/05 12:41

Buffer是用来保存原始数据
流是用来暂存和移动数据的
通常是结合起来使用

这里写图片描述

还是复制一张图片

var fs = require('fs')var source = fs.readFileSync('../buffer/timg.jpeg')fs.writeFileSync('stream_copy_timg.jpeg', source)

在node中node 文件名.js 就可以实现一张图片的复制

会不会这样的操作太简单暴力了,没办法精确的控制数据在流里面的传输,这个不用担心,stream是根据事件机制工作的,这就意味着在流对象上具有异步操作的特征,可以触发事件,监听事件,也就是说流在各个阶段的事件我们都可以监听。为了有更直观的认识,我们还是上一段代码:

//加载文件系统模块var fs = require('fs')//加载一个可读的流,读取js文件var readStream = fs.createReadStream('stream_copy_logo.js')//声明一个计数器var n = 0readStream    //数据正在传递时触发data事件    .on('data', function(chunk) {        n++        console.log('data emits')        //验证流是以buffer传递        console.log(Buffer.isBuffer(chunk))        //打印文件内容        console.log(chunk.toString('utf8'))        //暂停流        readStream.pause()        console.log('data pause')        //模拟一个异步处理        setTimeout(function() {            console.log('data pause end')            //从新启动数据传递            readStream.resume()        }, 3000)    })     //文件是可读的     .on('readable', function() {        console.log('data readable')    })    //数据完成传递完成后触发    .on('end', function() {        console.log(n)        console.log('data ends')    })    //整个流传输结束关闭是触发    .on('close', function() {        console.log('data close')    })    //读取出错触发    .on('error', function() {        console.log('data read error' + e)    })

在控制台打印出来
这里写图片描述

我们通过看n的数值乐意了解到一共接受了多少次数据

上面是对进行读取一个文件,接下来是边读边写

//加载文件模块var fs = require('fs')//创建一个刻度流var readStream = fs.createReadStream('stream_copy_timg.jpeg')//创建一个写入流var writeStream = fs.createWriteStream('timg-stream.jpeg')//触发data事件,绑定监听函数readStream.on('data', function(chunk) {    //判断数据是否写入,如果没写入,还在缓存取,就让读的速度慢点    if(writeStream.write(chunk) === false) {        console.log('stil cached')        //读取先暂停        readStream.pause()    }})//数据读取完毕,关闭数据流,end方法readStream.on('end', function() {    writeStream.end()})//数据应尽写入到目标了writeStream.on('drain', function(){    console.log('data drains')    //可以继续读了    readStream.resume()})

在控制台node 文件名.js
我们可以看到这样的信息
这里写图片描述
说明文件在不停的读 不停的写

原创粉丝点击