我试图在 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 对象的数组列表。因此,我为空间创建了 buffSpace。
Class Method: Buffer.concat(list[, totalLength])
list : Array List of Buffer objects to concat
totalLength: Number Total length of the buffers when concatenated
我得到了预期的结果,但不确定这样做是否正确。请提出是否有更好的解决方案来实现相同的目标。
最佳答案
我建议进行三处更改。
首先,如果您使用的是 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/