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; };