我正在尝试在Node.js中将两个缓冲区之间的空格连接起来。
这是我的代码。
var buff1 = new Buffer("Jumping");
var buff2 = new Buffer("Japang");
var buffSpace = new Buffer(1);
buffSpace[0] = "32";
var newBuff = Buffer.concat([buff1, buffSpace, buff2], (buff1.length + buff2.length + buffSpace.length));
console.log(newBuff.toString());
根据官方文档,第一个参数将是Buffer对象的Array列表。因此我为空间创建了 buffSpace 。
类方法:Buffer.concat(list [,totalLength])
list :Array要连接的Buffer对象列表
totalLength :Number连接时缓冲区的总长度
我得到了预期的结果,但不确定这是否是正确的方法。请建议是否有更好的解决方案来实现同样的目标。
答案 0 :(得分:2)
我建议有三个变化。
首先,如果您使用的是Node v6,请使用Buffer.from()
代替new Buffer()
,the latter is deprecated。
其次,您不需要将totalLength
的参数传递给Buffer.concat()
,因为it will be calculated automatically来自所有传递的缓冲区的长度。虽然文档指出传递总长度会更快,但只有传递一个常量值才会真实。你上面做的是计算长度,然后传递它,这就是concat()
函数在内部的作用。
最后,我建议将其放在一个与Array.prototype.join()
类似的函数中,但是对于缓冲区。
function joinBuffers(buffers, delimiter = ' ') {
let d = Buffer.from(delimiter);
return buffers.reduce((prev, b) => Buffer.concat([prev, d, b]));
}
你可以像这样使用它:
let buf1 = Buffer.from('Foo');
let buf2 = Buffer.from('Bar');
let buf3 = Buffer.from('Baz');
let joined = joinBuffers([buf1, buf2, buf3]);
console.log(joined.toString()); // Foo Bar Baz
或者像这样设置自定义分隔符:
let joined2 = joinBuffers([buf1, buf2, buf3], ' and ');
console.log(joined2.toString()); // Foo and Bar and Baz