前言:
Node.js Stream 流:Stream 是一个抽象接口,Node 中有很多对象实现了这个接口,例如,对 http 服务器发起请求的request对象就是一个 Stream,还有 stdout (标准输出)。
-
Node.js Stream 四种流类型 ?
Readable: 可读操作。
Writable: 可写操作。
Duplex: 可读可写操作。
Transform: 操作被写数据,然后读出结果。
-
Stream 对象常见事件 ?
data: 有数据可读时触发。
end: 没有更多数据可读时触发。
error: 在接收和写入错误时触发。
finish: 所有数据已被写入到底层系统时触发。
- 读入流操作流程 ?
// 导入 fs 模块
let fs = require('fs')
// 创建写入流
// 1, 新建一个 WritStream 对象, 语法:fs.createWriteStream(path,{配置操作})
console.log('ws', ws)
// 2, 文件流式写入
ws.write('写入的内容_1', function(err) {
err ? console.log(err) : console.log('内容_1流入完成')
})
ws.write('写入的内容_2', function(err) {
err ? console.log(err) : console.log('内容_2流入完成')
})
// 3,文件写入完成
ws.end(function() {
console.log('文件写入关闭')
})
// 4,添加事件的监听,监听文件打开事件
ws.on('open', function() {
console.log('文件打开!')
})
// 5,添加事件的监听,监听文件准备事件
ws.on('ready', function() {
console.log('文件写入已准备就绪')
})
// 6,添加事件的监听,监听文件关闭事件
ws.on('close', function() {
console.log('文件写入完成,关闭')
})
- 写入流操作流程 ?
// 导入相关模块
let fs = require('fs')
let ws = fs.createWriteStream('xiner_new.mp4', { flag: 'w' })
// 从流中读取数据
// 创建一个读取流,语法:fs.createReadStream(path,{可选配置项})
let rs = fs.createReadStream('xiner.mp4', { flags: 'r' })
//console.log(rs)
rs.on('open', function() {
console.log('打开读取文件')
})
// 每一批数据流入完后读取
rs.on('data', function(chunk) {
console.log('读取的单批数据为:', chunk)
ws.write(chunk, function() {
console.log('写入的单批数据!', chunk)
})
})
rs.on('close', function() {
ws.end()
console.log('读取流结束,关闭')
})
- 管道流操作流程 ?
管道流:管道提供了一个输出流到输入流的机制,通常我们用于 从一个流中获取数据并将数据传递到另一个流中 。
// 管道流
// 导入相关模块
let fs = require('fs')
// 创建一个可读流
let rs = fs.createReadStream('input.txt')
// 创建一个可写流
let ws = fs.createWriteStream('output.txt')
// 管道读写操作
rs.pipe(ws)
console.log('程序执行结束!!!')