idz*_*sky 1 javascript buffer node.js
我正在尝试创建附加缓冲区的方法.
这是代码,它带来了非常奇怪的结果:
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
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
:编辑:
对问题感到困惑.我以为他会处理相同类型的缓冲区.
缓冲区不能调整大小,因为它们是由Node.js中的固定大小定义的,所以最好的选择是使用这样的函数
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;
}
Run Code Online (Sandbox Code Playgroud)
你做错了什么? 您试图通过+ =方法操作内存中固定大小分配的长度.因此它抛出了异常,因为+ =运算符显然没有重新分配内存
*我们在这做什么*
非常简单,我们只是从参数缓冲区中创建一个新的缓冲区.
| 归档时间: |
|
| 查看次数: |
3396 次 |
| 最近记录: |