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;
};


Related articles: