• 07 【nodejs内置模块(下)】


    07 【nodejs内置模块(下)】

    1.stream 模块

    stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。

    什么是流?流是一种抽象的数据结构。想象水流,当在水管中流动时,就可以从某个地方(例如自来水厂)源源不断地到达另一个地方(比如你家的洗手池)。我们也可以把数据看成是数据流,比如你敲键盘的时候,就可以把每个字符依次连起来,看成字符流。这个流是从键盘输入到应用程序,实际上它还对应着一个名字:标准输入流(stdin)。

    如果应用程序把字符一个一个输出到显示器上,这也可以看成是一个流,这个流也有名字:标准输出流(stdout)。流的特点是数据是有序的,而且必须依次读取,或者依次写入,不能像Array那样随机定位。

    有些流用来读取数据,比如从文件读取数据时,可以打开一个文件流,然后从文件流中不断地读取数据。有些流用来写入数据,比如向文件写入数据时,只需要把数据不断地往文件流中写进去就可以了。

    在Node.js中,流也是一个对象,我们只需要响应流的事件就可以了:data事件表示流的数据已经可以读取了,end事件表示这个流已经到末尾了,没有数据可以读取了,error事件表示出错了。

    1.1 读取流

    const fs = require('fs');
    
    //创建读取流
    let rs = fs.createReadStream('hello.txt', 'utf-8');
    
    rs.on('open', function () {
       
      console.log('读取的文件已打开');
    }).on('close', function () {
       
      console.log('读取流结束');
    }).on('error', err => {
       
      console.log(err);
    }).on('data', function (chunk) {
       
      //每一批数据流入完成
      console.log('单批数据流入:' + chunk.length);
      console.log(chunk);
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    要注意,data事件可能会有多次,每次传递的chunk是流的一部分数据。

    读取视频

    const fs = require('fs');
    
    //创建读取流
    let rs = fs.createReadStream('video.mp4');
    
    //每一批数据流入完成
    rs.on('data', function (chunk) {
       
      console.log('单批数据流入:' + chunk.length);
      console.log(chunk);
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    1.2 写入流

    要以流的形式写入文件,只需要不断调用write()方法,最后以end()结束:

    const fs = require('fs');
    
    //创建写入流
    let ws = fs.createWriteStream('hello.txt', 'utf-8');
    
    //监听文件打开事件
    ws.on('open', function () {
       
      console.log('文件打开');
    });
    
    //监听文件关闭事件
    ws.on('close', function () {
       
      console.log('文件写入完成,关闭');
    });
    
    //文件流式写入
    ws.write('helloworld1!', function (err) {
       
      if (err) {
       
        console.log(err);
      } else {
       
        console.log('内容1流入完成');
      }
    });
    ws.write('helloworld2!', function (err) {
       
      if (err) {
       
        console.log(err);
      } else {
       
        console.log('内容2流入完成');
      }
    });
    
    //文件写入完成
    ws.end(function 
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
  • 相关阅读:
    【大数据实训】用Hbase模拟电影搜索引擎(四)
    机器学习笔记之指数族分布——充分统计量与模型参数的关系
    (Linux学习一):Mac安装vmWare11.5,centOS 7安装步骤教程
    华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)
    【ACWing】1401. 围住奶牛
    java基础10题
    JP《乡村振兴振兴战略下传统村落文化旅游设计》许少辉书香续,山水长
    Linux系统编程05
    java高并发实战<2>
    虚幻引擎 5.1 中全新的增强型输入操作系统
  • 原文地址:https://blog.csdn.net/DSelegent/article/details/127819482