在NodeJS中复制缓冲区的问题

我试图创build方法来追加缓冲区。

这是代码,这需要很奇怪的结果:

var offset = 0 var a = new Buffer(0) var b = new Buffer('test') offset = a.length a.length += b.length a.copy(b, offset) console.log(a.toString()) // everything works normaly // returns: test b = new Buffer('hello') offset = a.length a.length += b.length a.copy(b, offset) console.log(a.toString()) // code the same // but returns: test<Buff // nor: testhello // at the third time code doesn't works and raise error: targetStart out of bounds 

我做错了什么?

:编辑:

被这个问题弄糊涂了。 我以为他要处理同types的缓冲区。

缓冲区不能resize,因为它们是由Node.js中的固定大小定义的,所以最好的select是使用这样的函数

  function concat(buffers) { if (!Array.isArray(buffers)) { buffers = Array.prototype.slice.call(arguments); } var buffersToConcat = [], length = 0; buffers.forEach(function (buffer) { if (!Buffer.isBuffer(buffer)) { buffer = new Buffer(buffer); } length += buffer.length; buffersToConcat.push(buffer); }); var concatinatedBuffer = new Buffer(length), index = 0; buffersToConcat.forEach(function (buffer) { buffer.copy(concatinatedBuffer, index, 0, buffer.length); index += buffer.length; }); return concatinatedBuffer; } 

你在做什么错? 您试图通过+ =方法来操纵内存中固定大小分配的长度。 因此它抛出exception,因为+ =操作符显然没有重新分配内存

* 我们在这里做什么*

很简单,我们只是从参数缓冲区中创build一个新的缓冲区。