Node.js buffer.copy()api看起来很奇怪,不像C中的memcpy

在缓冲区索引的意义上,我对node.js中的Buffer.copy api感到困惑。 我期待它与C / Unix中的memcpy类似,但似乎并非如此

根据API文档和http://nodejs.org/docs/latest/api/buffers.html#buffer.copy中提供的示例

buffer.copy(targetBuffer, [targetStart], [sourceStart], [sourceEnd]) 

意味着targetStart不是索引到indexBuffer的索引,索引从0开始,sourceStart的情况也是如此。 而是索引似乎从1开始,而不是从0开始。最容易混淆的是sourceEnd。 从这个例子看起来它是在复制sourceEnd字节之前的字节,那么最后一个字节将如何复制

node.js文档中的示例是:构build两个缓冲区,然后将buf1从字节16到字节19复制到buf2,从buf2的第8个字节开始。 为此,声明是

 buf1 = new Buffer(26); buf2 = new Buffer(26); buf1.copy(buf2, 8, 16, 20); 

如果我想复制到第26个字节,我需要指定27作为sourceEnd? 看起来很奇怪,我需要提供一个大于源缓冲区长度的值

有人可以提供一个清楚的解释,为什么node.jsselect这种行为,而不是保持类似于memcpy?

select这些(可能是令人困惑的)索引约定的原因可能与核心JavaScript函数(如String.slice设置的先例有关。

请记住,node.js基于JavaScript,而不是C / POSIX。

Buffer索引是从零开始的 ,正如文档中提供的示例所示。

由于buf1的长度设置为26,其“有效”索引是0,1,2,…,25,所以第26字节的索引是25。

最后,你需要提供26作为sourceEnd参数值。