Node.js nodejsuncompressed gz只包含一行

Node.js nodejsuncompressed gz只包含一行,node.js,zlib,Node.js,Zlib,我试图用下面的代码流式处理一个大文件(几GB),但它只输出未压缩文件的第一行 const instream = fs.createReadStream('logs.gz'); const unzip = zlib.createGunzip(); const outstream = process.stdout; instream.pipe(unzip).pipe(outstream); // <first line of file>> const instream=fs.c

我试图用下面的代码流式处理一个大文件(几GB),但它只输出未压缩文件的第一行

const instream = fs.createReadStream('logs.gz');
const unzip = zlib.createGunzip();
const outstream = process.stdout;

instream.pipe(unzip).pipe(outstream);
// <first line of file>>
const instream=fs.createReadStream('logs.gz');
const unzip=zlib.createGunzip();
const outstream=process.stdout;
河道内管道(解压)。管道(扩流);
// >
我没有压缩该文件,但从日志提供程序的API文档来看,它应该是压缩的

如果我用7zip手动解压,解压效果很好。如果我用7zip再次压缩它,代码在这个7zip处理过的文件上会像预期的那样工作

const instream = fs.createReadStream('logs.gz');
const unzip = zlib.createGunzip();
const outstream = process.stdout;

instream.pipe(unzip).pipe(outstream);
// <first line of file>>
如果我钩住
解压
流的
错误
|
完成
数据事件,没有错误,数据打印一行,然后是完成。有什么线索吗

也尝试了
createUnzip


Win10上的节点5.5.0,在MacOSX节点v5.6.0上的行为相同。

这与您正在使用的节点版本有关:在节点v5.9.0之前,
zlib
没有正确处理包含多个Gzip块的文件。对于这些文件,只有第一个块将被解压缩

为了复制此问题,我使用以下方法创建了一个包含多个块的文件:

$ echo foo | gzip > logs.gz
$ echo bar | gzip >> logs.gz
我猜您的日志文件是以类似的方式创建的,其中每个日志行都被单独压缩并附加到压缩的日志文件中


可能唯一合理的解决方案是至少升级到v5.9.0(甚至是v6)。

如果您希望7zip有一个好的“一页”文档源


Wierd spot提供文档,但这是迄今为止我所看到的最好的解决方案,谢谢。我还遇到了另一个与5.9.0-相关的问题。但是文件在5.12.0上处理正确您对可以使用哪个版本的nodeJS有限制吗?