Method description:
Returns a new buffer object, and the new buffer and the old buffer share a memory.
But it is reduced by the start and end index offset. (For example, if there are 1 to 10 bytes in a buffer, we only want 4-8 bytes, so we can use this function buf.slice(4,8), because they share one memory, so they will not consume memory.)
Because the memory is shared, after modifying the new buffer, the content of the old buffer will also be modified.
grammar:
The code copy is as follows:
buffer.slice([start], [end])
Receive parameters:
start start position, default
end end position, default to buffer length
example:
Create a buffer using the ASCII alphabet, use the slice function, and then modify a byte in the original buffer.
The code copy is as follows:
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
Source code:
The code copy is as follows:
// 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;
};