WWW.lllT.neT这篇文章内容给我们分析一下Nodejs中的文件流,期待对各位有些协助!

文件流

因为电脑上中的各种各样物质读存的速率不一样、容积尺寸不一样,因而很有可能在使用中会出现一方存有长期性等候的情况

文件流关键有三种,各自为键入流(Readable)导出流(Writeable)全双工流(Duplex)。在其中有一种流不常见那便是 变换流(Transform)

在 node 中给予了 stream 控制模块,这一控制模块中有两个类案例:Readable 和 Writable,流里都会承继这两个类,因而会出现许多一同的方式等。

可写流(Readable)

键入流:数据信息从根源流入运行内存,把硬盘里边的传输数据到运行内存里边。

createReadStream

fs.createReadStream(途径, 配备)

在配备里边有:encoding(编码方法)、start(起止载入字节数)、end(完毕载入字节数)、highWaterMark(每回载入量)

highWaterMark:假如encoding有值,该总数表明一个字符数;假如encoding为null,该总数表明字节

回到一个Readable的派生类ReadStream

const readable = fs.createReadStream(filename, { encoding: 'utf-8', start: 1, end: 2, // highWaterMark: });

申请注册事情

readable.on(事情名,处理函数)

readable.on('open', (err, data)=> {
    // console.log(err);
    console.log('文档打开了');
})

readable.on('error', (data, err) => {
    console.log(data, err);
    console.log('读取文件产生不正确');
})

readable.on('close', (data, err) => {
    // console.log(data, err);
    console.log('文档关掉');
})

readable.close() // 手动式开启根据 readable.close()或是在文档载入结束以后全自动关掉--autoClose配备项默认设置为 true

readable.on('data', (data) => {
    console.log(data);
    console.log('文档已经载入');
})

readable.on('end', ()=>{
    console.log('文档载入结束');
})

中止载入

readable.pause() 中止载入,会开启 pause 事情

修复载入

readable.resume() 修复载入,会开启 resume 事情

可读流

const ws = fs.createWriteStream(filename[, 配备])

ws.write(data)

载入一个数据信息,data 可以使字符串数组还可以是Buffer,回到一个布尔值。

假如回到的是 true 表明载入安全通道沒有被布满,下面的数据信息可以立即载入,载入安全通道便是配备中的 highWaterMark 表明的尺寸。

假如回到的是false 表明载入安全通道布满,其他标识符逐渐等候,发生背压式状况。

const ws = fs.createWriteStream(filename, {
    encoding: 'utf-8',
    highWaterMark: 2
})

const flag = ws.write('刘');
console.log(flag); // false 
这儿尽管只能实行一次,可是在安全通道有空闲室内空间的情况下便会再次载入,并没有回到 值。

ws.write() 只能回到一次值。


const flag = ws.write('a');
console.log(flag);
const flag1 = ws.write('a');
console.log(flag1);
const flag2 = ws.write('a');
console.log(flag2);
const flag3 = ws.write('a');
console.log(flag3);

导出次序:true、false、false、false

第二次上传的过程中早已占了两字节数,第三次载入后立即布满了,因此回到false

应用流拷贝文档,并处理背压式问题

const filename = path.resolve(._dirname, './file/write.txt');
const wsfilename = path.resolve(._dirname, './file/writecopy.txt');

const ws = fs.createWriteStream(wsfilename);
const rs = fs.createReadStream(filename)

rs.on('data', chumk => {
    const falg = ws.write(chumk);
    if(!falg) {
        rs.pause();
    }
})

ws.on('drain', () => {
    rs.resume();
})

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})

pipe

应用 pipe 还可以立即将 可写流 和 载入流串连起來,还可以处理背压式问题

rs.pipe(ws);

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})

学习培训出来,觉得文件流在许多档案读写能力的那时候是很便捷的,而且可以达到迅速高效率,对比于writeFilereadFile高效率要高许多,及时处理也不会有较大的堵塞发生。

大量node有关专业知识,请浏览:nodejs 实例教程!!

以上便是深层次浅谈node.js中的文件流的详尽具体内容,大量请关心自学java网其他相关文章!

WWW.lllT.neT

声明:有的资源来自网络转载,版权归原作者所有,如有侵犯到您的权益请联系邮箱:our333@126.com我们将配合处理!

原文地址:深层次浅谈node.js中的文件流发布于2021-12-11 21:18:02