jsrosetta

Thư viện chuẩn

Gzip

zlib.gzip/unzip (promisify) của Node.js so với compress/gzip (Go), flate2 (Rust), zlib qua C interop (Swift) và java.util.zip (Java).

Phiên bản tối thiểu
Node.js ≥ 14.13.1Go ≥ 1.0Rust ≥ 1.67Swift ≥ 4.0Java ≥ 25
Đã chạy thử trên
Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1

Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.

Node.js expose gzip qua callback trong node:zlib, nên ví dụ dưới dùng promisify để await được. Go làm việc trực tiếp với io.Writer/io.Reader: gzip.NewWriter bọc quanh một buffer để nén, gzip.NewReader đọc ngược lại để giải nén. Rust không có gzip trong std nên dùng crate flate2, cũng theo mô hình Read/Write. Swift không có API gzip nào ở tầng Foundation lẫn framework Compression (framework đó chỉ nén ra định dạng zlib/LZFSE, không phải container gzip thật) — ví dụ dưới gọi thẳng zlib của hệ thống qua C interop (import zlib). Java dùng java.util.zip.GZIPOutputStream/GZIPInputStream có sẵn từ rất lâu.

Nén và giải nén

import { gzip, unzip } from 'node:zlib'
import { promisify } from 'node:util'
 
const gzipAsync = promisify(gzip)
const unzipAsync = promisify(unzip)
 
const data = Buffer.from('hello world', 'utf-8')
 
const compressed = await gzipAsync(data)
console.log(compressed) // <Buffer 1f 8b 08 00 ...>
 
const decompressed = await unzipAsync(compressed)
console.log(decompressed.toString()) // hello world

Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#gzip