代码拉取完成,页面将自动刷新
/*
* @Author: ike_yu ike_yu@qq.com
* @Date: 2024-01-09 13:46:55
* @LastEditors: ike_yu ike_yu@qq.com
* @LastEditTime: 2024-01-09 17:16:24
* @FilePath: \my_projectd:\my_test\myNode\stream.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
const stream = require('stream')
const fs = require('fs')
// 创建可读流
// const readable = new stream.Readable();
// 或者直接操作文件创建可读流
/* fs.createReadStream(path, [options])
* path: 文件路径
* options:可选项
* flags: 文件权限,默认为r
* encoding: 编码,默认为null
* fd:文件描述符,默认为null
* mode: 文件模式,默认为0o666
* autoClose: 出错或结束时自动关闭,默认true
* emitClose: 流销毁时发送close事件,默认true
* start: 指定开始读取的位置
* end: 指定结束读取的位置
* highWaterMark: 可读取的阈值,一般设成16-100kb间
*/
// 一、单工流
function fun1() {
// 可读流
const read = fs.createReadStream('./poems2.txt', {highWaterMark: 25})
// 可写流
const write = fs.createWriteStream('./poens1.txt', {flags: 'a'}) // 追加
read.setEncoding('utf8');
read.on('readable', () => {
while(null !== (chunk = read.read(25))) {
console.log(chunk)
}
})
read.on('data', (chunk) => {
console.log('chunk', chunk.toString())
read.pause() // 暂停data事件
console.log('ispaused', read.isPaused()) // 是否暂停
setTimeout(() => {
read.resume() // 恢复data事件
console.log('ispaused', read.isPaused()) // 是否暂停
}, 1000)
})
// 可写流对象绑定可读流对象
read.pipe(write)
// 写入流写入数据
write.write("\n鉴赏:写的好! \n", 'utf8')
read.on('close', () => {
read.unpipe(write) // 可写流解绑可读流
read.destroy() // 销毁流
write.end() // 关闭可写流
console.log('读取完毕')
})
}
// fun1()
function fun2() {
const writeable = new stream.Writable({
write: function(chunk, encoding, next) {
console.log('chunk', chunk.toString())
next()
}
})
writeable.write('天气晴朗')
writeable.cork() // 之后写入的数据存入内存
writeable.write('阳光明媚')
writeable.write('好天气呀')
writeable.uncork() // 写入的内存数据写入目标处
writeable.end()
writeable.on('finish', () => {
writeable.destroy()
})
}
// fun2()
// 二、双工流
function funTwo1() {
const duplex = stream.Duplex()
duplex._read = function() { // 会自动调用
this.push('读取数据')
this.push(null) // 数据完结,触发end事件
}
duplex._write = function(data, encoding, next) {
console.log('write ',data.toString());
next()
}
duplex.on('data', (data) => {
console.log('读取的数据', data.toString())
})
duplex.on('end', data => {
console.log('读取完成')
})
duplex.write('写入的数据')
duplex.end() // 写入完成,触发finish事件
duplex.on('finish', () => console.log('写入完成'))
}
// funTwo1()
// 三、转换流(一种特殊双工流)
// 可读流的数据经过处理进入可写流
function funThree1() {
class TransformReverse extends stream.Transform{
constructor() {
super()
}
_transform(data, encoding, callback) {
// 处理数据
const res = data.toString().split('').reverse().join('')
this.push(res)
callback()
}
}
const transform = new TransformReverse()
transform.on('data', data => {
console.log('读取到数据', data.toString())
})
transform.on('end', data => { // 只会执行一次
console.log('读取完成')
})
transform.write('写入数据ABCD')
transform.write('写入数据ABCE')
transform.end() // 触发写入结束、读取结束
transform.on('finish', () => {
console.log('写入完成')
})
}
funThree1()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。