如何基于node . js实现压缩和解压缩的方法

  介绍

小编给大家分享一下如何基于节点。js实现压缩和解压缩的方法,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

js是什么

js是JavaScript的简称,它是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一部分,主要用于web的开发,可以给网站添加各种各样的动态效果,让网页更加美观。

<强>压缩格式

zip和gzip是两种我们最常见到的压缩格式,当然,gzip在Windows下很少有人接触。

沥青是一种归档格式,它默认不会压缩,需要结合gzip来将最终的焦油文件以gzip格式压缩成为一个焦油。广州文件,通常我们会缩写为tgz。

为什么没有提到rar ?因为它是专利保护的算法,你可以免费获得解压工具,而压缩工具是需要付费的,所以我们一般应用场景下,很少会提供rar压缩文件。

本文将分别介绍gzip、焦油、tgz和邮政的压缩和解压缩在节点。js下如何实现。

<强>未压缩文件库

本文所使用的未压缩文件库来自于urllib,需要先克隆它下来到指定目录。

代码如下:


git克隆https://github.com/node-modules/urllib.git nodejs-compressing-demo

<强> gzip

在Linux的世界,每个工具的职责会很纯粹,非常单一,如gzip,它只会对文件进行压缩,至于文件夹如何打包压缩,跟它没关系,那是焦油要去负责的事情。

<强> gzip命令行压缩一个文件

例如我们要将nodejs-compressing-demo/lib/urllib。js文件进行gzip压缩,会得到一个urllib.js。广州文件,源文件会被删除。

,美元ls  -l  nodejs-compressing-demo/lib/urllib.js   -rw-r——r, 1, a  a  31318, Feb  12, 11:27  nodejs-compressing-demo/lib/urllib.js      美元,gzip  nodejs-compressing-demo/lib/urllib.js      美元,ls  -l  nodejs-compressing-demo/lib/urllib.js.gz   -rw-r——r, 1, a  a  8909年,Feb  12, 11:27  nodejs-compressing-demo/lib/urllib.js.gz      #,还原压缩文件   美元,gunzip  nodejs-compressing-demo/lib/urllib.js。广州

文件大小从31318字节减少到8909字节,超过3.5倍的压缩效果。

还可以通过管方式,结合猫命令,将文件压缩并保存为任意文件:

,美元ls  -l  nodejs-compressing-demo/README.md   -rw-r——r, 1, a  a  13747, Feb  12, 11:27  nodejs-compressing-demo/README.md      美元,cat  nodejs-compressing-demo/README.md  |, gzip 祝辞README.md.gz      美元,ls  -l  README.md.gz   -rw-r——r, 1, a  a  4903年,Feb  12, 11:50  README.md.gz

<强>节点。js实现gzip

当然,我们不会真的从零开始实现一个gzip算法和工具,在节点。js的世界,早已有人为你准备好这些基础库,我们只需要开箱即用。

本文将会使用压缩模块,实现所有压缩和解压缩代码。

为什么会选择压缩?因为它有足够充分的代码质量和单元测试保证,处于活跃的维护状态,API非常友好,而且还支持流式接口。

<强>承诺接口

const  compressing =,要求(& # 39;压缩# 39;);//,选择,gzip 格式,然后调用,compressFile 方法   compressing.gzip.compressFile (& # 39; nodejs-compressing-demo/lib/urllib.js& # 39;,, & # 39; nodejs-compressing-demo/lib/urllib.js.gz& # 39;)   ,不要犹豫((),=祝辞,{   console.log才能(& # 39;成功# 39;);   ,})   ,.catch (err =祝辞,{   console.error才能(错);   ,});//,解压缩是反响过程,接口都统一为,解压   compressing.gzip.uncompress (& # 39; nodejs-compressing-demo/lib/urllib.js.gz& # 39;,, & # 39; nodejs-compressing-demo/lib/urllib.js2& # 39;)   ,不要犹豫((),=祝辞,{   console.log才能(& # 39;成功# 39;);   ,})   ,.catch (err =祝辞,{   console.error才能(错);   以前,});

结合async/等待的编程模型,代码写起来就是一个普通的异步io操作。

const  compressing =,要求(& # 39;压缩# 39;);      async  function  main (), {   ,try  {   await 才能;compressing.gzip.compressFile (& # 39; nodejs-compressing-demo/lib/urllib.js& # 39;,   ,,& # 39;nodejs-compressing-demo/lib/urllib.js.gz& # 39;);   console.log才能(& # 39;成功# 39;);   ,}catch (错),{   console.error才能(错);   ,}      ,//解压缩   ,try  {   await 才能;compressing.gzip.uncompress (& # 39; nodejs-compressing-demo/lib/urllib.js.gz& # 39;,   ,,& # 39;nodejs-compressing-demo/lib/urllib.js2& # 39;);   console.log才能(& # 39;成功# 39;);   ,}catch (错),{   console.error才能(错);   ,}   }      main ();

如何基于node . js实现压缩和解压缩的方法