node.js中的buffer.slice方法使用说明
node.js中的buffer.slice方法使用说明
发布时间:2016-12-30 来源:查字典编辑
摘要:方法说明:返回一个新的buffer对象,这个新buffer和老buffer公用一个内存。但是被start和end索引偏移缩减了。(比如,一个...

方法说明:

返回一个新的buffer对象,这个新buffer和老buffer公用一个内存。

但是被start和end索引偏移缩减了。(比如,一个buffer里有1到10个字节,我们只想要4-8个字节,就可以用这个函数buf.slice(4,8),因为他们共用一个内存,所以不会消耗内存,)

因为共用内存,所以修改新的buffer后,老buffer的内容同样也会被修改。

语法:

复制代码 代码如下:

buffer.slice([start], [end])

接收参数:

start 开始位置,默认

end 结束位置,默认为buffer长度

例子:

用ASCII码字母表创建一个buffer,用一下slice函数,然后修改原buffer中的一个字节。

复制代码 代码如下:

var buf1 = new Buffer(26);

for (var i = 0 ; i < 26 ; i++) {

buf1[i] = i + 97; // 97 is ASCII a

}

var buf2 = buf1.slice(0, 3);

console.log(buf2.toString('ascii', 0, buf2.length));

buf1[0] = 33;

console.log(buf2.toString('ascii', 0, buf2.length));

// abc

// !bc

源码:

复制代码 代码如下:

// TODO(trevnorris): currently works like Array.prototype.slice(), which

// doesn't follow the new standard for throwing on out of range indexes.

Buffer.prototype.slice = function(start, end) {

var len = this.length;

start = ~~start;

end = util.isUndefined(end) ? len : ~~end;

if (start < 0) {

start += len;

if (start < 0)

start = 0;

} else if (start > len) {

start = len;

}

if (end < 0) {

end += len;

if (end < 0)

end = 0;

} else if (end > len) {

end = len;

}

if (end < start)

end = start;

var buf = new NativeBuffer();

sliceOnto(this, buf, start, end);

buf.length = end - start;

if (buf.length > 0)

buf.parent = util.isUndefined(this.parent) ? this : this.parent;

return buf;

};

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类