node.js - 如何从 NodeJS 中的一个基本流(Git Packfile)中正确读取多个 zlib 流?
问题描述
我正在创建一个 NodeJS 模块来与 git 存储库进行交互,并且我正在尝试读取来自 GitHub 等公共 git 托管的 Packfile。问题是,Packfiles 由许多 zlib 流组成,但我不知道如何:
- 膨胀(解压缩)第一个 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)
读取 1 个流很酷,但是如果您生成两个流,请替换:
var stream = createZlibStream(1)
readZlibStream(stream)
.then(console.log)
.catch(console.error)
和:
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)
解决方案
推荐阅读
- java - 如何在没有实体(因此没有存储库)的情况下调用 Spring Data JPA 中的存储过程?
- python - 比较嵌套列表的相似度
- webmin - webmin中的utf 8
- python - Scipy 从文本文件构建网络图
- excel - Deleting values between first two parentheses
- node.js - NodeJS Undefined TypeError,我哪里出错了?
- asp.net-mvc - Automapper 返回代理对象而不是字符串
- c# - 使用相同的 uri 参数传递,得到两个不同的结果
- postgresql - AWS 数据库单列添加了非常多的数据
- css - Angular:单元格的 innerHtml 中的 CSS 类使用