Node.js 如何正确地从NodeJS中的一个基本流(Git Packfile)读取多个zlib流?
我正在创建一个NodeJS模块来与git存储库交互,并且我正在尝试读取来自GitHub等公共git主机的包文件。 问题是,打包文件由许多zlib流组成,但我不知道如何:Node.js 如何正确地从NodeJS中的一个基本流(Git Packfile)读取多个zlib流?,node.js,zlib,inflate,nodejs-stream,Node.js,Zlib,Inflate,Nodejs Stream,我正在创建一个NodeJS模块来与git存储库交互,并且我正在尝试读取来自GitHub等公共git主机的包文件。 问题是,打包文件由许多zlib流组成,但我不知道如何: 对第一个zlib流进行充气(解压缩) 用它做点什么 为下一个zlib流充气 等等 以下是最简单的示例: // main.js const zlib = require('zlib') const Readable = require('stream').Readable; function createZlibStream
- 对第一个zlib流进行充气(解压缩)
- 用它做点什么
- 为下一个zlib流充气
- 等等
// main.js
const zlib = require('zlib')
const Readable = require('stream').Readable;
function createZlibStream(count = 1) {
const s = new Readable();
s._read = () => {};
for (let i = 0; i < count; i++) {
s.push(zlib.deflateSync("stream" + i));
}
s.push(null);
return s;
}
function readZlibStream(stream) {
return new Promise(function(resolve, reject) {
var data = "",
zlibStream = zlib.createInflate();
stream
.pipe(zlibStream)
.on("data", chunk => {
data += chunk;
})
.on("end", () => {
stream.unpipe(zlibStream)
resolve(data);
})
});
}
var stream = createZlibStream(1)
readZlibStream(stream)
.then(console.log)
.catch(console.error)
与:
您将获得该输出:
user@hostname:~/zlib-error$ node main.js
stream0
events.js:174
throw er; // Unhandled 'error' event
^
Error: unexpected end of file
at Zlib.zlibOnError [as onerror] (zlib.js:162:17)
Emitted 'error' event at:
at Zlib.zlibOnError [as onerror] (zlib.js:165:8)
var stream = createZlibStream(2)
readZlibStream(stream)
.then((data) => {
console.log(data)
readZlibStream(stream)
.then(console.log)
.catch(console.error)
})
.catch(console.error)
user@hostname:~/zlib-error$ node main.js
stream0
events.js:174
throw er; // Unhandled 'error' event
^
Error: unexpected end of file
at Zlib.zlibOnError [as onerror] (zlib.js:162:17)
Emitted 'error' event at:
at Zlib.zlibOnError [as onerror] (zlib.js:165:8)