1

我编写了下面的代码来打开一个 txt 文件并对其执行一些转换,然后将转换写入一个新文件。原始源文件虽然是 gzip'd,但我无法让节点工作的 zlib 模块。有人可以展示一个将 zlib 集成到下面的示例中的示例吗?在这种情况下。bigdata.sql 实际上是 bigdata.sql.gz,我只是在处理之前手动对其进行压缩。是制作我自己的对象并继承流对象的答案吗?

更新

我回答了我自己的问题,而不是问如何,也许有人可以告诉我一个更好的方法来做到这一点?或者也许这是最好的方法......

var fs = require('fs');
var util = require('util');
var stream = require('stream');
var zlib = require('zlib');

console.time('gz decompress')

// inherit from the stream object
function transformStream () {
  this.writable = true;
  this.readable = true;
}

util.inherits(transformStream, stream.Stream);

transformStream.prototype.modifyRow = function (data) {
  // console.log("begin data--->");
    console.log(data.toString('ascii'));
  // console.log("<---end data");
};

transformStream.prototype.write = function(data) {
    this.emit("data", data);
};

transformStream.prototype.end = function() {
    this.emit("end");
    console.timeEnd('gz decompress')
};

transformStream.prototype.destroy = function() {
  this.emit('close');
};

var ts = new transformStream();

ts.on("data", function(data) {
  this.modifyRow(data);
});


path='bigdata.sql.gz';
var file = fs.createReadStream(path).pipe(zlib.createUnzip()).pipe(ts);
4

0 回答 0