方法說明:
回傳一個新的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
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
start = len;
if (start
start = 0;
} else if (start > len) {
start = len;
}
if (end
end = len;
if (end
end = 0;
} else if (end > len) {
end = len;
}
if (end
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;
};