我对缓冲区索引含义中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不是targetBuffer的索引,索引从0开始,与sourceStart的情况相同。相反,索引似乎从1开始而不是0.最令人困惑的是sourceEnd。从示例看起来像复制sourceEnd字节之前的字节,然后如何复制最后一个字节
node.js doc中的示例是 示例:构建两个缓冲区,然后将buf1从字节16到字节19复制到buf2,从buf2中的第8个字节开始。 为此,声明是
buf1 = new Buffer(26);
buf2 = new Buffer(26);
buf1.copy(buf2, 8, 16, 20);
如果我想复制到第26个字节,我需要将27指定为sourceEnd吗?看起来非常奇怪,我需要提供一个大于源缓冲区长度的值
有人可以提供一个明确的解释,说明为什么node.js选择了这种行为而不是类似于memcpy?
答案 0 :(得分:2)
选择这些(可能令人困惑的)索引约定的原因可能与核心JavaScript函数(例如String.slice
)设置的先例有关。
请记住,node.js基于JavaScript,而不是C / POSIX =)
答案 1 :(得分:0)
Buffer
的索引为zero-based,因为可以在文档中提供的示例中看到。
由于buf1
的长度设置为26,因此其“有效”索引为0,1,2,...,25,因此第26个字节的索引为25。
最后,您需要提供26作为sourceEnd
参数值。