我有两个简单的节点脚本,我希望将它们以bash的形式发送到一起。我想从一个脚本向另一个脚本流式传输2个整数。移至下一位时出现问题,例如如果我理解正确的话,可以7位表示127,而128需要8位。我的猜测是,它与整数的符号有关,例如加号或减号。由于这个原因,我专门使用了writeUInt8
和readUInt8
...
脚本 in.js ,向 stdout 发送2个整数:
process.stdout.setEncoding('binary');
const buff1 = Buffer.alloc(1);
const buff2 = Buffer.alloc(1);
buff1.writeUInt8(127);
buff2.writeUInt8(128);
process.stdout.write(buff1);
process.stdout.write(buff2);
process.stdout.end();
脚本 out.js ,从 stdin 读取并再次写入 stdout :
process.stdin.setEncoding('binary');
process.stdin.on('data', function(data) {
for(const uInt of data) {
const v = Buffer.from(uInt).readUInt8();
process.stdout.write(v + '\n');
}
});
在bash中,我连接进出:
$ node in.js | node out.js
预期结果:
127
128
实际结果:
127
194
答案 0 :(得分:1)
将编码设置为二进制会破坏 in.js 中的接收数据。
根据Readable Stream documentation of Node.js:
默认情况下,未分配任何编码,并且将返回流数据 作为
Buffer
个对象。
我测试了下面的代码,它可以正常工作:
// in.js
process.stdin.on('data', function (data) {
for (let i = 0; i < data.length; ++i) {
const v = data.readUInt8(i);
process.stdout.write(v + '\n');
}
});