方法說明:
返回一個新的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;
};