作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我只是在测试 Node.js 的 ZLIB,但很快就会遇到奇怪的结果。这是我的脚本(灵感来自 Node.js 手册示例 http://nodejs.org/api/zlib.html#zlib_examples ):
var zlib = require('zlib') ,
fs = require('fs') ,
inp1 = fs.createReadStream('file.txt') ,
out1 = fs.createWriteStream('file.txt.gz') ,
inp2 = fs.createReadStream('file.txt.gz') ,
out2 = fs.createWriteStream('output.txt') ;
inp1.pipe(zlib.createGzip()).pipe(out1); /* Compress to a .gz file*/
inp2.pipe(zlib.createGunzip()).pipe(out2); /* Uncompress the .gz file */
在此示例中,在执行脚本之前,我创建了一个名为 file.txt
的文件,并用示例文本(例如 Lorem Ipsum)填充它。
前面的脚本成功创建了 .gz
文件,我可以从 finder 中解压缩(我在 Mac OSX 上),但是未压缩的 output.txt
文件是空的。
为什么?你有什么想法吗?
最佳答案
Node 流是异步的,因此您的两个流将同时运行。这意味着当您最初打开 inp2
时,file.txt.gz
是空的,因为另一个写入流还没有向其中添加任何内容。
var zlib = require('zlib') ,
fs = require('fs');
var src = 'file.txt',
zip = 'file.txt.gz',
dst = 'output.txt';
var inp1 = fs.createReadStream(src);
var out1 = fs.createWriteStream(zip);
inp1.pipe(zlib.createGzip()).pipe(out1);
out1.on('close', function(){
var inp2 = fs.createReadStream(zip);
var out2 = fs.createWriteStream(dst);
inp2.pipe(zlib.createGunzip()).pipe(out2);
})
关于Node.js - ZLIB Gunzip 返回空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15529132/
我是一名优秀的程序员,十分优秀!