我试图在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());

根据官方文档,第一个参数将是缓冲区对象的数组列表。因此我创造了空间的buffspace。
类方法:buffer.concat(list[,totalLength])
list:要连接的缓冲区对象的数组列表
totalength:连接时缓冲区的总长度
我得到了预期的结果,但不确定这样做是否正确。如果有更好的解决方案,请提出建议。

最佳答案

我建议有三个改变。
首先,如果您使用的是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

关于javascript - 如何在node.js中用分隔符连接缓冲区?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38132860/

10-15 23:04