【发布时间】:2013-11-23 22:27:19
【问题描述】:
我正在尝试做看起来很简单的事情:获取一个文件名为 X 的文件,并创建一个 gzip 压缩版本作为“X.gz”。 Nodejs 的 zlib 模块没有方便的 zlib.gzip(infile, outfile),所以我想我会使用一个输入流、一个输出流和一个 zlib gzipper,然后将它们管道化:
var zlib = require("zlib"),
zipper = zlib.createGzip(),
fs = require("fs");
var tryThing = function(logfile) {
var input = fs.createReadStream(logfile, {autoClose: true}),
output = fs.createWriteStream(logfile + ".gz");
input.pipe(zipper).pipe(output);
output.on("end", function() {
// delete original file, it is no longer needed
fs.unlink(logfile);
// clear listeners
zipper.removeAllListeners();
input.removeAllListeners();
});
}
然而,每次我运行这个函数,Node.js 的内存占用增加了大约 100kb。我是不是忘了告诉溪流他们应该再次杀死自己,因为不再需要它们?
或者,或者,有没有办法只 gzip 文件而不用担心流和管道?我尝试在谷歌上搜索“node.js gzip a file”,但它只是指向 API 文档的链接,以及关于 gzipping 流和缓冲区的堆栈溢出问题,而不是如何 gzip 文件。
【问题讨论】: