9.streamstreamfs模块中集中文件读写方式的区别使用异步方式使用同步方式将文件完全读入缓冲区readFilereadFileSync将文件的一部分读入缓冲区readreadSync将全部数据写入文件writeFilewriteFileSync将部分数据写入将缓冲区中的内容写入文件writewriteSync当使用readFile或readFileSync读取文件内容时,Node.js首先将完整的文件内容读入缓冲区,然后再从缓冲区中读取文件内容。当使用writeFile或writeFileSync方法写入文件内容时,Node.js会先将文件内容读入缓存区,然后一次性将缓存区中的内容写入文件。也就是说,当使用readFile或readFileSync读取文件内容或使用writeFile或writeFileSync`写入文件内容时,Node.从缓存中获取。在此期间,Node.js不执行任何其他处理。如果使用read或者readSync方法读取文件内容,Node.js会不断的将文件中的一小段内容读入缓存区,最后从缓存区读取文件内容。如果使用write或者writeSync写入文件,Node.js.js会执行如下流程:1.将要写入的数据写入一个contentbuffer;2、缓冲区满后,将缓冲区中的内容写入文件;3.重复过程1和过程2,直到所有数据写入文件。也就是说,如果你使用read或者readSync读取文件内容或者使用write或者writeSync写入文件,Node.js在读写文件的过程中是允许进行其他操作的。流的概念在应用程序中,流是一组有序的字节数据传输方式,有起点和终点。应用程序中各个对象之间交换和传输数据时,总是将对象所包含的数据转换成各种形式的流数据(字节数据),然后通过流传输,到达目标对象后再将流数据转换成可以在这个对象中使用的数据。在Node.js中,各种实现了stream.Readable接口的对象用于将对象数据读取为流数据。所有这些对象都是继承EventEmitter类的实例对象。在读取数据的过程中,有可能触发各种事件。在Node.js中,可以使用流动模式和非流动模式来读取数据。使用流动模式时,会使用操作系统内部的I/O机制来读取数据。这将使您能够尽快读取数据。使用非流动模式时,必须显式调用对象的read方法来读取数据。Node.js中用于读取数据的各种对象对象描述fs.ReadStream用于读取文件http.IncomingMessage表示客户端请求或服务器响应net.Socket表示一个socket端口对象child.stdout用于创建子进程的标准输出流.如果子进程和父进程共享输入输出流,则丢弃子进程的标准输出流child.stderr用于创建子进程的标准错误输出流。如果子进程和父进程共享输入输出流,则丢弃子进程的标准错误输出流。process.stdin用于创建进程的标准输入流。Gzip、Deflate、DeflatRaw用于实现数据压缩9.1使用ReadStream对象读取文件fs.createReadStream(path,[options])optionsparameterflags:'r',//default,encoding:'utf8',//base64,ascii,null(default),autoClose:true(default),//falsestart:使用整数值指定文件开始读取位置end:使用整数值指定文件读取结束位置constfs=require('fs');letfilename='./one.js'letfile=fs.createReadStream(filename,{start:0,end:100,encoding:'utf8'});file.on('open',(fd)=>{console.log('打开文件并开始读取这个文件流..');});file.pause();//暂停读取文件流file.on('data',(data)=>{console.log(`读取文件内容,${data}`);});file.resume();//继续读取文件流file.on('end',()=>{console.log('filereadend');});file.on('close',()=>{console.log('文件关闭');});file.on('错误',(err)=>{console.log(`文件读取错误,${err}`);});/****打开文件并开始读取此文件流..*读取文件内容,你好*文件读取结束*文件关闭*/9.2使用WriteStream对象写入文件fs.createWriteStream(path,[options])constfs=require('fs');letreadFilename='./readFilename.js';letwriteFileName='./writeFileName.js';letreadFile=fs.createReadStream(readFilename,{开始:0,end:100,encoding:'utf8'});letwriteFile=fs.createWriteStream(writeFileName);readFile.on('data',(data)=>{writeFile.write(data,()=>{console.log('writewriteFileName.js');console.log(data);})});readFile.on('open',(fd)=>{console.log(`openreadFilename.js`);});readFile.on('end',()=>{writeFile.end('byebye',()=>{console.log('writeFile.jsend');console.log(`${writeFile.bytesWritten}`)});});/****打开readFilename.js*写入writeFileName.js*console.log('这是readFilename.js');*writeFile.js结束*45*/
