Buffer. Slice method in node.js
- 2020-03-30 04:35:42
- OfStack
Method description:
Returns a new buffer object that shares one memory with the old buffer.
But it's shrunk by the start and end index offsets. (for example, if there are 1 to 10 bytes in a buffer and we only want 4 to 8 bytes, we can use this function buf.slice(4,8) because they share the same memory, so they don't consume memory.)
Since memory is Shared, the contents of the old buffer are also modified after the new buffer is modified.
Grammar:
buffer.slice([start], [end])
Receiving parameters:
Start Start location, default
End End position, default to buffer length
Example:
Create a buffer with 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:
// 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;
};