Deflate
和 Gzip
是两种不同的压缩算法。
简而言之,Gzip
比 Deflate
的压缩质量更高,因此 Gzip
的压缩也相对耗时一些。
压缩:
Deflate
Gzip
解压缩:
Inflate
Gunzip
压缩方法:
zlib.deflate(buf, callback)
: 使用Deflate
算法压缩数据。zlib.deflateSync(buf)
: 同步版本的zlib.deflate
。zlib.gzip(buf, callback)
: 使用Gzip
算法压缩数据。zlib.gzipSync(buf)
: 同步版本的zlib.gzip
。
解压方法:
zlib.inflate(buf, callback)
: 使用Inflate
算法解压数据。zlib.inflateSync(buf)
: 同步版本的zlib.inflate
。zlib.gunzip(buf, callback)
: 使用Gunzip
算法解压数据。zlib.gunzipSync(buf)
: 同步版本的zlib.gunzip
。
Transform
流:
zlib.createGzip()
: 创建一个Gzip
压缩流。zlib.createGunzip()
: 创建一个Gunzip
解压流。zlib.createDeflate()
: 创建一个Deflate
压缩流。zlib.createInflate()
: 创建一个Inflate
解压流。
js
const path = require('path')
const fs = require('fs')
const zlib = require('zlib')
// 同步压缩
const buffer = fs.readFileSync(path.resolve(__dirname, './temp/input.txt'))
const gzipBuffer = zlib.gzipSync(buffer)
fs.writeFileSync(path.resolve(__dirname, './temp/input.txt.gz'), gzipBuffer)
// 同步解压缩
const gunzipBuffer = fs.readFileSync(path.resolve(__dirname, './temp/input.txt.gz'))
const uncompressedBuffer = zlib.gunzipSync(gunzipBuffer)
fs.writeFileSync(path.resolve(__dirname, './temp/uncompressed.txt'), uncompressedBuffer)
1-1.deflate
js
const path = require('path')
const fs = require('fs')
const zlib = require('zlib')
// 压缩文件
const input = fs.createReadStream(path.resolve(__dirname, './temp/input.txt'))
const output = fs.createWriteStream(path.resolve(__dirname, './temp/input.txt.gz'))
input.pipe(zlib.createDeflate()).pipe(output)
1-2.inflate
js
const path = require('path')
const fs = require('fs')
const zlib = require('zlib')
const unzipInput = fs.createReadStream(path.resolve(__dirname, './temp/input.txt.gz'))
const unzipOutput = fs.createWriteStream(path.resolve(__dirname, './temp/uncompressed.txt'))
unzipInput.pipe(zlib.createInflate()).pipe(unzipOutput)
2-1.gzip
js
const path = require('path')
const fs = require('fs')
const zlib = require('zlib')
// 压缩文件
const input = fs.createReadStream(path.resolve(__dirname, './temp/input.txt'))
const output = fs.createWriteStream(path.resolve(__dirname, './temp/input.txt.gz'))
input.pipe(zlib.createGzip()).pipe(output)
2-2.gunzip
js
const path = require('path')
const fs = require('fs')
const zlib = require('zlib')
const unzipInput = fs.createReadStream(path.resolve(__dirname, './temp/input.txt.gz'))
const unzipOutput = fs.createWriteStream(path.resolve(__dirname, './temp/uncompressed.txt'))
unzipInput.pipe(zlib.createGunzip()).pipe(unzipOutput)