node.js基础 Stream流

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 = 0

readStream
    //数据正在传递时触发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
我们可以看到这样的信息
这里写图片描述
说明文件在不停的读 不停的写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值