node.js中的buffer.slice方法使用說明,node.jsbuffer
方法說明:
返回一個新的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;
};