Node的Stream文件流

Stream文件流

由于Buffer缓冲区限制在1GB,超过1GB的文件无法直接完成读/写操作,在读/写大文件时,如果读/写资源一直持续不停止,Node.js将无法继续其他工作。为此,Node.js中提供了Stream文件流模块,用来解决大数据文件操作的问题。

文件流的概念

Node.js的File System模块并没有提供一个 copy的方法,但是通过读取文件和写人文件的方式可以实现,即把文件A的内容全部读入Buffer缓冲区,然后再从缓冲区读出写人文件B,该过程的执行流程图如下图所示。
文件复制流程
在上图中,可以看出要读取数据需要存放到Buffer缓冲区中,然后再从缓冲区读出写入到文件,Buffer缓冲区限制在1GB,这样的操作对于小型的文本文件,没有多大问题,但是对于体积较大的文件,比如音频、视频文件,动辄几吉字节大小,如果使用理想的方法,很容易使内存“爆仓”。理想的方法应该是读一部分,写一部分,不管文件有多大,只要时间允许,总会处理完成,这里就需要用到流的概念,文件复制操作使用文件流的读/写机制进行会防止“爆仓”现象的出现,流程如图所示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
node-stream-zip 是查看和提取大型 ZIP 文件Node.js 库。特性:从不加载完整的归档到内存,一切都是通过块读取大型归档支持所有操作都是非阻塞,非同步 i/o快速初始化无依赖,无二进制组件内置 zlib 模块解压deflate, deflate64, sfx, macosx/windows 内置归档ZIP64 支持安装$ npm install node-stream-zip使用var StreamZip = require('node-stream-zip');   var zip = new StreamZip({       file: 'archive.zip',       storeEntries: true     }); zip.on('error', function(err) { /*handle*/ }); zip.on('ready', function() {     console.log('Entries read: '   zip.entriesCount);     // stream to stdout     zip.stream('node/benchmark/net/tcp-raw-c2s.js', function(err, stm) {         stm.pipe(process.stdout);     });     // extract file     zip.extract('node/benchmark/net/tcp-raw-c2s.js', './temp/', function(err) {         console.log('Entry extracted');     });     // extract folder     zip.extract('node/benchmark/', './temp/', function(err, count) {         console.log('Extracted '   count   ' entries');     });     // extract all     zip.extract(null, './temp/', function(err, count) {         console.log('Extracted '   count   ' entries');     });     // read file as buffer in sync way     var data = zip.entryDataSync('README.md'); }); zip.on('extract', function(entry, file) {     console.log('Extracted '   entry.name   ' to '   file); }); zip.on('entry', function(entry) {     // called on load, when entry description has been read     // you can already stream this entry, without waiting until all entry descriptions are read (suitable for very large archives)      console.log('Read entry ', entry.name); });

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值