作用
nodeJS中的流最大的作用是:读取大文件的过程中,不会一次性的读入到内存中。每次只会读取数据源的一个数据块。然后后续过程中可以立即处理该数据块(数据处理完成后会进入垃圾回收机制)。而不用等待所有的数据。
这么做的原因:因为浏览器的运行内存一般情况下只有1~3g,倘若我们将一个4g的视频放到浏览器播放,此时浏览器的运行内存便无法去解析了,所以就需要文件流技术了。每次只读取一部分视频,然后运行完成后再销毁,再读取另一段视频,这样便可以完美播放视频了
创建文件流
读取
创建文件流需要利用到require
中的fs
模块
const fs = require("fs");
const path = require("path");
let filePath=path.resolve(__dirname,"./experiment.txt");//合并路径
fs.createReadStream(filePath,{
})
这样就创建了一个文件流了,通过fs
模块的createReadStream
函数来操作文件。
fs.createReadStream(path,[options])
参数一path :获取文件的路径
参数二options:可选配置项(用于定义如何操作文件)
配置项常用属性
encoding:编码方式
start:起始字节
end:结束字节
highWaterMark:每次读取的数量(也就是每次读几个字节)
autoClose:自动关闭
这样创建之后只是配置了文件流的方式,如果想操作的文件的输出方式的话,需要给它搭载事件
搭载文件流事件
const fs = require("fs");
const path = require("path");
let filePath=path.resolve(__dirname,"./experiment.txt");
let rs = fs.createReadStream(filePath,{
encoding:"utf-8",
highWaterMark:3,
autoClose:true
})
先建立一个变量来接收返回的文件对象。通过rs.on()
来给它搭载事件
rs.on()
常用搭载事件:
open: 打开的时候运行的事件
close :关闭的时候运行的事件
error: 发生错误的时候出发的事件
data: 获取到一部分数据后触发
end:所有数据读取完后触发
pause(): 暂停
resume(): 继续
举几个例子:
open()事件
const fs = require("fs");
const path = require("path");
let filePath=path.resolve(__dirname,"./experiment.txt");
let rs = fs.createReadStream(filePath,{
})
rs.on("open",()=>{
console.log("打开文件流");
})
控制台打印
error()事件
const fs = require("fs");
const path = require("path");
let filePath=path.