javascript - 如何在 node.js 中使用定界符连接缓冲区?

标签 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 对象的数组列表。因此,我为空间创建了 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/

相关文章:

javascript - 无法使用 Node js将视频上传到bunny流

node.js - '错误: self signed certificate' with node+express application

javascript - Express 中间件中丢失 ajax 数据

c++ - 基于堆栈的缓冲区溢出

c - 为什么 fflush() 会影响 fork 进程的输出?

javascript - 使用 express 时在 EJS View 中查找当前 url

相当于 PHP 的 strstr() 函数的 JavaScript 或 jQuery

java - GWTCanvas 在 IE8 中不工作

node.js - 使用 Mocha/Chai 测试 CoffeeScript 时出现奇怪的 fs.readFile 行为

c - zlib:如何标注 avail_out