방법 설명 :
새 버퍼 객체를 반환하고 새 버퍼와 이전 버퍼는 메모리를 공유합니다.
그러나 시작 및 엔드 인덱스 오프셋으로 줄어 듭니다. (예를 들어, 버퍼에 1 ~ 10 바이트가있는 경우 4-8 바이트 만 원하므로 하나의 메모리를 공유하기 때문에이 함수 buf.slice (4,8)를 사용할 수 있으므로 메모리를 소비하지 않습니다.)
메모리가 공유되므로 새 버퍼를 수정 한 후에는 이전 버퍼의 내용이 수정됩니다.
문법:
코드 사본은 다음과 같습니다.
buffer.slice ([start], [end])
매개 변수 수신 :
시작 위치 시작, 기본값
엔드 엔드 위치, 버퍼 길이에서 기본값
예:
ASCII 알파벳을 사용하여 버퍼를 만들고 슬라이스 함수를 사용한 다음 원래 버퍼에서 바이트를 수정하십시오.
코드 사본은 다음과 같습니다.
var buf1 = 새로운 버퍼 (26);
for (var i = 0; i <26; i ++) {
buf1 [i] = i + 97; // 97은 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) : 현재 array.prototype.slice ()처럼 작동합니다
// 범위를 벗어난 인덱스를 던지기위한 새로운 표준을 따르지 않습니다.
buffer.prototype.slice = function (start, end) {
var len = this.length;
시작 = ~~ 시작;
end = util.isundefined (end)? 렌 : ~~ 끝;
if (시작 <0) {
시작 += len;
if (시작 <0)
시작 = 0;
} else if (start> len) {
시작 = 렌;
}
if (end <0) {
끝 += 렌;
if (end <0)
끝 = 0;
} else if (end> len) {
끝 = 렌;
}
if (end <start)
끝 = 시작;
var buf = New NativeBuffer ();
Sliceonto (이것은 Buf, Start, End);
buf.length = end- 시작;
if (buf.length> 0)
buf.parent = util.isundefined (this.parent)? 이것 : this.parent;
반환 buf;
};