如何在node.js中用分隔符连接缓冲区?

我试图连接两个缓冲区之间的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列表。 因此我创build了空间的buffSpace

类方法 :Buffer.concat(list [,totalLength])
list :连接缓冲区对象的数组列表
totalLength :Number连接时缓冲区的总长度

我得到了预期的结果,但不确定是否正确。 如果有什么更好的解决scheme,请提出相同的build议。

我build议有三个变化。

首先,如果您使用Node v6,请使用Buffer.from()而不是new Buffer() ,因为后者已弃用 。

其次,你不需要将Buffer.concat()的parameter passing给Buffer.concat() ,因为它会根据传递的所有缓冲区的长度自动计算 。 尽pipe文档中提到传递总长度会更快,但如果传递一个常量值,则这只会是真的。 你上面正在做的是计算长度,然后传递,这是什么concat()函数将在内部无论如何。

最后,我会build议把这个函数的作用像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