当前位置: 首页 > 后端技术 > Node.js

Node.js教程第三篇-Node.js流

时间:2023-04-03 23:32:29 Node.js

Stream介绍Stream是一个抽象接口,Node中很多对象都实现了这个接口。比如向http服务器发起请求的request对象是一个Stream,stdout(标准输出)。通常用于打开大型文本文件,为读取操作创建数据流。所谓大文本文件是指文本文件体积较大,无法加载到读操作的缓存中,只能分几次发送。每次发送都会触发一个数据事件,发送结束后会触发结束事件。读取流varfs=require("fs");vardata='';//创建可读流varreaderStream=fs.createReadStream('input.txt');//console.log(readerStream);//设置编码为utf8。readerStream.setEncoding('UTF8');//处理流事件-->data,end,anderrorreaderStream.on('data',function(chunk){data+=chunk;});readerStream.on('end',function(){console.log(data);});readerStream.on('error',function(err){console.log(err.stack);});console.log("程序执行完成");Writestream创建一个可写流并写入文件output.txtvarfs=require("fs");vardata='China';//创建一个可写流并写入到文件output.txt中fileoutput.txt//varwriterStream=fs.createWriteStream('output.txt',{'flags':'a'});//添加文本varwriterStream=fs.createWriteStream('output.txt');//使用utf8编码写入数据writerStream.write(data,'UTF8');//标记文件结束writerStream.end();//处理流事件-->data,end,anderrorwriterStream.on('finish',function(){console.log("Writingcompleted.");});writerStream.on('error',function(err){console.log(err.stack);});console.log("程序执行完成");pipelinestream管道提供了一种输出流到输入流的机制。通常我们使用Getdatafromonestream和将它传递给另一个流。我们把文件比作装满水的水桶,水就是文件中的内容。我们用一根管道(pipe)连接两个桶,让水从一个桶流到另一个桶,这样大文件就慢慢实现了。复制过程。在下面的示例中,我们读取一个文件的内容并将内容写入另一个文件。varfs=require("fs");//创建可读流varreaderStream=fs.createReadStream('input.txt');//创建可写流//{'flags':'a'}//AppendtextvarwriterStream=fs.createWriteStream('output.txt');//管道读写操作//读取input.txt文件的内容,并将内容写入output.txt文件readerStream.pipe(writerStream);console.log("程序执行完成");链接流链接是一种通过将输出流连接到另一个流来在每个流上创建多个操作链的机制。链式流通常用于管道操作。接下来我们使用管道和链来压缩和解压缩文件。Compressionvarfs=require("fs");//压缩解压模块varzlib=require('zlib');//压缩input.txt文件为input.txt.gz//读取流中的文本fs.createReadStream('input.txt').pipe(zlib.createGzip())//调用读取的文本到压缩模块进行压缩.pipe(fs.createWriteStream('input.zip'));//把压缩流保存console.log("文件已压缩。");decompressvarfs=require("fs");//压缩解压模块varzlib=require('zlib');fs.createReadStream('input.zip').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('input1.txt'));console.log("文件解压完成。")