gpt4 book ai didi

Node.js - ZLIB Gunzip 返回空文件

转载 作者:搜寻专家 更新时间:2023-10-31 22:40:04 24 4
gpt4 key购买 nike

我只是在测试 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com