我编写了下面的代码来打开一个txt文件并对其执行一些转换,然后将转换写出到一个新文件。原始源文件虽然是gzip'd我无法让zlib模块让节点工作。有人可以展示一个将zlib集成到下面示例中的示例吗?在这种情况下。 bigdata.sql实际上是bigdata.sql.gz,我只是在处理之前手动进行gunzip。答案是制作我自己的对象,并继承流对象吗?
我回答了我自己的问题,而不是问怎么样,也许有人可以告诉我一个更好的方法来做到这一点?或许这是最好的方式......
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);