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