node.js中的buffer.slice方法使用说明
方法说明:
返回一个新的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中的一个字节。
varbuf1=newBuffer(26);
for(vari=0;i<26;i++){
buf1[i]=i+97;//97isASCIIa
}
varbuf2=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):currentlyworkslikeArray.prototype.slice(),which
//doesn'tfollowthenewstandardforthrowingonoutofrangeindexes.
Buffer.prototype.slice=function(start,end){
varlen=this.length;
start=~~start;
end=util.isUndefined(end)?len:~~end;
if(start<0){
start+=len;
if(start<0)
start=0;
}elseif(start>len){
start=len;
}
if(end<0){
end+=len;
if(end<0)
end=0;
}elseif(end>len){
end=len;
}
if(end<start)
end=start;
varbuf=newNativeBuffer();
sliceOnto(this,buf,start,end);
buf.length=end-start;
if(buf.length>0)
buf.parent=util.isUndefined(this.parent)?this:this.parent;
returnbuf;
};