美文网首页
Node Stream

Node Stream

作者: yanyongchao | 来源:发表于2018-02-22 17:18 被阅读0次

    流的概念

    1. 流是一组有序的,有起点和终点的字节数据传输手段
    2. 它不关心文件的整体内容,只关注是否从文件中读到了数据,以及读到数据之后的处理
    3. 流是一个抽象接口,被 Node 中的很多对象所实现。比如HTTP 服务器request和response对象都是流。

    流的种类

    1. Readable - 可读的流 (如 fs.createReadStream());
    2. Writable - 可写的流 (如 fs.createWriteStream());
    3. Duplex -
      可读写的流 (如 net.Socket);
    4. Transform - 在读写过程中可以修改和变换数据的 Duplex 流 (如 zlib.createDeflate());

    可读流Readable

    可读流分为两种,flowing模式和paused模式,主要区别就是paused有缓冲区的概念,而flowing没有

    在 flowing 模式下, 可读流自动从系统底层读取数据,并通过 EventEmitter 接口的事件尽快将数据提供给应用。

    在 paused 模式下,必须显式调用 stream.read() 方法来从流中读取数据片段。
    所有初始工作模式为 paused 的 Readable 流,可以通过下面三种途径切换到 flowing 模式:

    1. 监听 'data' 事件
    2. 调用 stream.resume() 方法
    3. 调用 stream.pipe() 方法将数据发送到 Writable

    flowing模式

    const fs = require('fs')
    const path = require('path')
    const rs = fs.createReadStream(path.join(__dirname, './1.txt'))
    
    rs.setEncoding('utf8')
    
    rs.on('data', (data) => {
        console.log(data)
    })
    

    paused模式

    const fs = require('fs')
    const path = require('path')
    const rs = fs.createReadStream(path.join(__dirname, './1.txt'))
    
    rs.setEncoding('utf8')
    
    rs.on('readable', () => {
        let d = rs.read(1)
        console.log(d)
    })
    

    可写流writeable

    实现了stream.Writable接口的对象来将流数据写入到对象中

    const fs = require('fs')
    const path = require('path')
    const ws = fs.createWriteStream(path.join(__dirname, './1.txt'))
    
    ws.write('123')
    ws.end('456')
    

    对于Duplex,Transfor个人觉得会用就好了,理解也很容易,多看看api就好

    相关文章

      网友评论

          本文标题:Node Stream

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