gunzip从读取流读取部分



我使用Node.JSS3存储桶中提取文件。那边的文件是gzippedgz)。

我知道每个文件的内容都是由行组成的,其中每一行都是某个记录的JSON,该记录未能放在Kinesis上。

每个文件由大约12K个这样的记录组成。我希望能够在下载文件时处理这些记录。

如果文件不是gzipped,则可以使用streamsreadline模块轻松完成。因此,唯一阻止我这样做的是gunzip过程,据我所知,它需要在整个文件上执行。

有没有办法把gunzipping作为文件的一部分?

谢谢。


编辑1:(坏例子)

尝试@Mark Adler的建议:

  const fileStream = s3.getObject(params).createReadStream();
  const lineReader = readline.createInterface({input: fileStream});
  lineReader.on('line', line => {
    const gunzipped = zlib.gunzipSync(line);
    console.log(gunzipped);
  })

我得到以下错误:

错误:标头检查不正确在Zlib_handle.oneror(zlib.js:363:17)

是。node.js有一个完整的zlib接口,它允许您一次解压任意多的gzip文件。

解决上述问题的工作示例

以下解决了上述代码中的问题:

  const fileStream = s3.getObject(params).createReadStream().pipe(zlib.createGunzip());
  const lineReader = readline.createInterface({input: fileStream});
  lineReader.on('line', gunzippedLine => {
    console.log(gunzippedLine);
  })

相关内容

  • 没有找到相关文章

最新更新