博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js学习之路08——fs文件系统之stream流的基本介绍
阅读量:6273 次
发布时间:2019-06-22

本文共 3012 字,大约阅读时间需要 10 分钟。

9. stream

  • fs模块中集中文件读写方法的区别
用途 使用异步方式 使用同步方式
将文件完整读入缓存区 readFile readFileSync
将文件部分读入缓存区 read readSync
将数据完整写入文件 writeFile writeFileSync
将缓存区中的部分内容写入文件 write writeSync
在使用
readFile或者
readFileSync读取文件内容时,Node.js首先将文件内容完整地读入缓存区,再从缓存区中读取文件内容。在使用
writeFile或者
writeFileSync方法写入文件内容时,Node.js首先将该文件内容读入缓存区,然后一次性将缓存区中内容写入到文件中。也就是说,在使用
readFile或者readFileSync
读取文件内容或者使用writeFile
或者writeFileSync`写入文件内容时,Node.js会将该文件内容视为一个整体,为其分配缓存区并且一次性将文件内容读取到缓存区。在这期间,Node.js不再执行任何其他处理。

如果使用read或者readSync方法读取文件内容,Node.js将不断地将文件中一小块内容读入缓存区,最后从缓存区中读取文件内容,如果使用write或者writeSync写入文件内,Node.js将实行以下过程:1.将需要书写的数据书写到一个内容缓冲区;2. 待缓冲区写满后再讲该缓冲区中内容写入到文件中;3. 重复执行过程1和过程2,直到数据全部写入文件为止。也就是说,如果使用read或者readSync读取文件内容或者使用write或者writeSync写入文件,在读写文件过程中允许Node.js执行其他操作。

  • 的概念
在一个应用程序中,流是一组有序的,有起点和终点的字节数据的传输手段。在应用程序中各种对象之间交换与传输数据的时候,总是先将对象中所包含的数据转换为各种形式的流数据(字节数据),再通过流的传输,到达目的对象后再将流数据转换为该对象中可以使用的数据。

在Node.js中,使用各种实现了stream.Readable接口的对象来讲对象数据读取为流数据,所有这些对象都是继承了EventEmitter类的实例对象,在读取数据的过程中,将可能触发各种事件。

在Node.js中,可以使用flowing模式与非flowing模式来读取数据,当使用flowing模式时,将使用操作系统的内部I/O机制来读取数据。这将允许你以最快的速度来读取数据。当使用非flowing模式时,必须显式调用对象的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])
  • options参数

    • flags: 'r',//default,
    • encoding: 'utf8', //base64, ascii, null(default),
    • autoClose: true(default), //false
    • start: 使用整数值来指定文件的开始读取位置
    • end: 使用整数值来指定文件的结束读取位置
const fs = require('fs');let filename = './one.js'let file = fs.createReadStream(filename, {    start: 0,    end: 100,    encoding: 'utf8'});file.on('open', (fd) => {    console.log('open file and start read this file stream..');});file.pause(); // 暂停读取文件流file.on('data', (data) => {    console.log(`读取到文件内容, ${data}`);});file.resume(); // 恢复读取文件流file.on('end', () => {    console.log('文件读取结束');});file.on('close', () => {    console.log('文件关闭');});file.on('error', (err) => {    console.log(`文件读取错误, ${err}`);});/*** * open file and start read this file stream.. * 读取到文件内容, hello * 文件读取结束 * 文件关闭 */

9.2 使用WriteStream对象写入文件

  • fs.createWriteStream(path, [options])
const fs = require('fs');let readFilename = './readFilename.js';let writeFileName = './writeFileName.js';let readFile = fs.createReadStream(readFilename, {    start: 0,    end: 100,    encoding: 'utf8'});let writeFile = fs.createWriteStream(writeFileName);readFile.on('data', (data) => {    writeFile.write(data, () => {        console.log('write writeFileName.js');        console.log(data);    })});readFile.on('open', (fd) => {    console.log(`open readFilename.js`);});readFile.on('end', () => {    writeFile.end('byebye', () => {        console.log('writeFile.js end');        console.log(`${writeFile.bytesWritten}`)    });});/*** * open readFilename.js * write writeFileName.js * console.log('this is readFilename.js'); * writeFile.js end * 45  */

转载地址:http://qelpa.baihongyu.com/

你可能感兴趣的文章
试水区块链出版?纽约时报在招人了
查看>>
拥抱PostgreSQL,红帽再表态:SSPL的MongoDB坚决不用
查看>>
QCon演讲速递:异步处理在分布式系统中的优化作用
查看>>
Javascript 中的 Array 操作
查看>>
YARN的AsyncDispatcher原理
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>
AMD 16核心Zen处理器首曝:四通道DDR4
查看>>
阿里大数据打假:实时分析数据每秒1亿次
查看>>
如何入手 dubbo
查看>>
英国网络安全公司Darktrace获6400万美元C轮融资
查看>>
CYQ.Data+EasyUI开发:几个相关的问题CheckBox、Tree、TreeGrid
查看>>
Extjs分页使用Java实现数据库数据查询
查看>>
BayWa收购光伏分销商Solarmatrix进军澳大利亚市场
查看>>
股东致函雅虎董事会要求别再烧钱 雅虎反呛
查看>>
移动OA的魅力--大众点评的“企业号”运用法则
查看>>