国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

基于Node.js實現壓縮和解壓縮的方法

2024-05-06 15:21:47
字體:
來源:轉載
供稿:網友

壓縮格式

zip 和 gzip 是兩種我們最常見到的壓縮格式,當然,gzip 在 Windows 下很少有人接觸。

tar 是一種歸檔格式,它默認不會壓縮,需要結合 gzip 來將最終的 tar 文件以 gzip 格式壓縮成為一個 tar.gz 文件,通常我們會縮寫為 tgz。

為什么沒有提到 rar?因為它是專利保護的算法,你可以免費獲得解壓工具,而壓縮工具是需要付費的。所以我們一般應用場景下,很少會提供 rar 壓縮文件。

本文將分別介紹 gzip,tar,tgz 和 zip 的壓縮和解壓縮在 Node.js 下如何實現。

未壓縮文件庫

本文所使用的未壓縮文件庫來自于 urllib ,需要先 clone 它下來到指定目錄。

代碼如下:
git clone https://github.com/node-modules/urllib.git nodejs-compressing-demo

gzip

在 Linux 的世界,每個工具的職責會很純粹,非常單一,如 gzip,它只會對文件進行壓縮,至于文件夾如何打包壓縮,跟它沒關系,那是 tar 要去負責的事情。

gzip 命令行壓縮一個文件

例如我們要將 nodejs-compressing-demo/lib/urllib.js 文件進行 gzip 壓縮,會得到一個 urllib.js.gz 文件,源文件會被刪除。

$ 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.gz

文件大小從 31318 字節減少到 8909 字節,超過 3.5 倍的壓縮效果。

還可以通過 pipe 方式,結合 cat 命令,將文件壓縮并保存為任意文件:

$ 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

Node.js 實現 gzip

當然,我們不會真的從零開始實現一個 gzip 算法和工具,在 Node.js 的世界,早已有人為你準備好這些基礎庫,我們只需要開箱即用。

本文將會使用 compressing 模塊,實現所有壓縮和解壓縮代碼。

為什么會選擇 compressing?因為它有足夠充分的代碼質量和單元測試保證,處于活躍的維護狀態,API 非常友好,而且還支持流式接口。

Promise 接口

const compressing = require('compressing');// 選擇 gzip 格式,然后調用 compressFile 方法compressing.gzip.compressFile('nodejs-compressing-demo/lib/urllib.js', 'nodejs-compressing-demo/lib/urllib.js.gz') .then(() => {  console.log('success'); }) .catch(err => {  console.error(err); });// 解壓縮是反響過程,接口都統一為 uncompresscompressing.gzip.uncompress('nodejs-compressing-demo/lib/urllib.js.gz', 'nodejs-compressing-demo/lib/urllib.js2') .then(() => {  console.log('success'); }) .catch(err => {  console.error(err); });            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 内丘县| 钟祥市| 营口市| 临沂市| 理塘县| 虎林市| 邹城市| 武山县| 宁城县| 祁连县| 赤水市| 阳江市| 江阴市| 夏河县| 广南县| 武穴市| 离岛区| 开封市| 屏山县| 泽州县| 武汉市| 大城县| 芜湖市| 靖西县| 南华县| 章丘市| 青浦区| 龙游县| 赣州市| 广东省| 闽侯县| 繁峙县| 中卫市| 沂源县| 瓮安县| 于都县| 永吉县| 黄梅县| 渑池县| 隆回县| 盖州市|