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

时间:2016-06-30 20:40:14

标签: javascript node.js buffer

我正在尝试在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连接时缓冲区的总长度

我得到了预期的结果,但不确定这是否是正确的方法。请建议是否有更好的解决方案来实现同样的目标。

1 个答案:

答案 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