node.js文件的压缩解压问题
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
流式读写文件
第一步先要弄清楚为什么需要压缩和解压文件,这是因为文件太大了,我们需要将文件进行压缩,既然压缩了。
后期就需要对其进行解压缩。我们要考虑最坏的打算,文件过于大,电脑内存没办法一步获取并且存储这么大的文件,所以我们需要使用到流式的方法来处理文件。
首先来了解一下如何流式处理文件
知识预知
fs模块里有Stream相关接口:
- createReadStream可以创建读文件流,
- createWriteStream可以创建写文件流,
pipe可以在两个流之间创建一个管道,一部分一部分的将一个文件流里面的数据传输到另一个文件流里
例子
举个例子,来理解一下使用方法
let fs = require('fs'); let readerStream = fs.createReadStream('a.txt'); let writerStream = fs.createWriteStream('b.txt'); readerStream.pipe(writerStream);
这段代码各位看客可以复制下来运行一下,看看结果,当然你至少要保证读文件流里的路径地址是真实存在的,即同级目录下,你在创建一个a.txt文件,里面随便写上一些内容,运行后会在同级目录下生成一个b.txt文件,这个文件里面的内容就是通过文件流和管道方法,从a.txt文件里复制过来的内容。
这段代码创建了两个文件流,一个是读文件流,一个是写文件流,如何通过pipe方法将两个文件流相通,从读文件流中读数据传入到写文件流里面,这样的方式传输数据不会占用太多空间,因为在这个传输过程中,每次只有一小部分的数据进入占有内存。
压缩解压文件
知识预知
node.js里有个原生模块库zlib进行文件的压缩解压处理
- createGzip方法压缩文件
- createGunzip方法解压文件
压缩文件
fs.createReadStream('a.txt') .pipe(zlib.createGzip()) .pipe(fs.createWriteStream('input.txt.gz'));
一行一行的来观察这个三行代码,第一行创建了读文件流,读取a.txt里面的文件,第二行通过zlib.createGzip()对数据进行压缩,第三行通过fs.createWriteStream(‘input.txt.gz’)将文件写出到input.txt.gz文件里。
这三个部分通过pipe进行连接,也就是说处理的不是一个完整的文件,而是一部分一部分的处理文件,也就是通过流式的方式处理文件。
解压文件
fs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('c.txt'));
通过先前的压缩文件的讲解,详细各位同学应该也能看得懂解压文件的各个部分做了什么事情,希望各位同学自己思考思考。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。
相关文章
如何在NestJS中添加对Shopify的WebHook验证详解
这篇文章主要为大家介绍了如何在NestJS中添加对Shopify的WebHook验证详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-08-08Node.js 8 中的 util.promisify的详解
本篇文章主要介绍了Node.js 8 中的 util.promisify的详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-06-06
最新评论