node.js文件的压缩解压

  • 流式读写文件
    • 知识预知
    • 例子
  • 压缩解压文件
    • 知识预知
    • 压缩文件
    • 解压文件

流式读写文件

第一步先要弄清楚为什么需要压缩和解压文件,这是因为文件太大了,我们需要将文件进行压缩,既然压缩了。后期就需要对其进行解压缩。我们要考虑最坏的打算,文件过于大,电脑内存没办法一步获取并且存储这么大的文件,所以我们需要使用到流式的方法来处理文件。首先来了解一下如何流式处理文件

知识预知

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'));

通过先前的压缩文件的讲解,详细各位同学应该也能看得懂解压文件的各个部分做了什么事情,希望各位同学自己思考思考。

node.js文件的压缩解压相关推荐

  1. Node.js 实现 zip压缩和解压

    Node.js 实现 zip压缩和解压 安装 compressing npm install compressing --save compressing.zip.compressDir('nodej ...

  2. Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理

    Python 基础 之 zipfile 文件夹压缩/解压方法的简单整理 目录

  3. java代码实现解压文件_Java压缩/解压文件的实现代码

    用java压缩/解压文件: import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; impo ...

  4. linux有没有右键解压文件夹,压缩解压文件无需右键可以这样操作

    为了节省磁盘空间,随时将文件压压缩保存是很好的习惯.可恰恰是这个好习惯却让笔者的朋友犯了难,因为他需要从多个压缩包中提取文件,但是由于压缩文件数量众多,而且提取出来的文件都保存到同一个目录内,如果用鼠 ...

  5. Linux环境下,文件的压缩/解压

    一.zip格式   zip可能是目前使用的最多的文档压缩格式.优点:可以在不同的操作系统平台上使用.缺点:支持的压缩率不是很高.而tar.gz和tar.bz2在压缩率方面做得非常好. 压缩一个zip文 ...

  6. .Net Core 使用ZipFile类--文件的压缩解压

    NuGet引用官网自带的System.IO.Compression.ZipFile var filename = "测试压缩解压文件"; var path = Directory. ...

  7. sftputils下载文件并压缩解压(带密码)

    项目中需要改变对接方式有http接口,改成sftp文件形式,文件是一个带密码的zip包,so需要把文件下载到本地,并解压处理,相关工具类如下: public class SftpUtils {priv ...

  8. 算法 - 赫夫曼编码(对字符串进行压缩 与 解压(解码)) - (对文件进行压缩解压)

    1.压缩:使用赫夫曼编码进行压缩 题目 构建赫夫曼树 package tree.huffmantree;import java.util.*;public class HuffmanCode {pub ...

  9. Linux xz文件的压缩解压

    解压: 方法一:将xz文件转化为tar文件,通过tar命令解压 xz -d xxxx.tar.xz tar -xf xxxx.tar 方法二:通过tar 命令直接解压xz文件 tar Jxf xxxx ...

最新文章

  1. 一个Java应届生从上海离职,附项目源码
  2. 4G最快网速相当于30M宽带
  3. 基于matlab/simulink的PMSM直接转矩控制和bangbang控制
  4. 这三大“监控系统”是机房重中之重?
  5. Maven引入外部jar的几种方法
  6. python完全支持面向对象编程_python面向对象编程----009
  7. WebService.asmx架设后,显示调用按钮的方法
  8. 四川教育考试网全国计算机,四川教育考试院
  9. [转载] Python的变量与常量与基本命名规则
  10. mysql中where的用法_详解MySQL中WHERE子句的用法
  11. 小度wifi还原为无线网卡
  12. LVM 的自定义报告(pvs vgs lvs各参数详解)
  13. TCP滑动窗口原理终于清楚了!
  14. YourBatman表白了,在Java 27岁生日这天
  15. 【Codecs系列】双帧参考特性
  16. Joystick Shield 的使用方法
  17. 最省心的Python版本和第三方库管理——初探Anaconda
  18. 何有效提高香港主机的访问速度?
  19. Java开发微信公众号之被动回复用户消息-回复图片消息
  20. 区块链社交“无社交”

热门文章

  1. GISTEMP全球表面温度数据下载及处理
  2. 时间复杂度到底怎么算?
  3. M100 使用 Onboard SDK 激活、获取控制权限失败
  4. 使用React实现一个简单计算器
  5. 自定义ViewGroup之游标卡尺的实现
  6. YYModel 源码分析:字典转模型
  7. 代理加盟共享充电宝的理由
  8. 你听过哥德巴赫猜想吗?不愧是世界近代三大数学难题之一啊(48)
  9. ios应用提交上架被appstore拒绝的十大理由
  10. linux 服务 init3,Linux系统启动过程详解之UpStart init(三)