我无法从stdin(使用nodejs)实时解压缩数据流。 要求是一旦到达stdin就处理解压缩的流(最多几毫秒的延迟)。 问题是管道stdin到zlib接缝等待流关闭。
以下打印12345
$ echo 12345 | node deflate.js | node inflate.js
12345
但是以下命令行没有,因为它没有收到EOF:
$ node generator.js | node deflate.js | node inflate.js
这与zlib deflate是否可以在内部处理部分输入,或者是否应该添加到流中的问题(例如每个流块之前的块大小)有关。
deflate.js:
process.stdin
.pipe(require("zlib").createDeflate())
.pipe(process.stdout);
inflate.js
process.stdin
.pipe(require('zlib').createInflate())
.pipe(process.stdout)
generator.js:
var i = 0
setInterval(function () {
process.stdout.write(i.toString())
i++
},1000)
答案 0 :(得分:1)
问题是没有设置Z_SYNC_FLUSH标志:
If flush is Z_SYNC_FLUSH, deflate() shall flush all pending output to next_out and align the output to a byte boundary. A synchronization point is generated in the output.
deflate.js:
var zlib = require("zlib");
var deflate = zlib.createDeflate({flush: zlib.Z_SYNC_FLUSH});
process.stdin.pipe(deflate).pipe(process.stdout);
inflate.js:
var zlib = require('zlib')
process.stdin
.pipe(zlib.createInflate({flush: zlib.Z_SYNC_FLUSH}))
.pipe(process.stdout)