ArrayBuffer
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
ArrayBuffer
객체는 일반적인 원시 바이너리 데이터 버퍼를 표현하는 데 사용됩니다.
다른 언어에서는 종종 "바이트 배열"이라고 부르는 바이트 배열입니다. ArrayBuffer
의 내용을 직접 수정하는 것은 불가능하지만, 대신 버퍼를 특정 형식으로 나타내는 형식화 배열이나 DataView
객체 중 하나를 생성하여, 이를 통해 버퍼의 내용을 읽거나 쓸 수 있습니다.
ArrayBuffer()
생성자는 주어진 길이(바이트)를 가진 새로운 ArrayBuffer
를 생성합니다. Base64 문자열이나 로컬 파일과 같은 기존 데이터에서도 배열 버퍼를 생성할 수 있습니다.
ArrayBuffer
는 Transferable objects입니다.
설명
ArrayBuffers 크기 조절하기
ArrayBuffer
객체는 ArrayBuffer()
생성자를 호출할 때 maxByteLength
옵션을 포함하여 크기를 조정할 수 있도록 만들 수 있습니다. ArrayBuffer
의 크기를 조정할 수 있는지 여부 그리고 최대 크기는 각각 resizable
와 maxByteLength
속성에 접근하여 질의 할 수 있습니다. resize()
호출로 크기 조정이 가능한 ArrayBuffer
에 새 크기를 할당할 수 있습니다. 새 바이트는 0으로 초기화됩니다.
이러한 기능을 사용하면 ArrayBuffer
의 크기를 더 효율적으로 조정할 수 있습니다.
그렇지 않으면 새로운 크기로 버퍼의 복사본을 만들어야 합니다. 또한 이와 관련하여 WebAssembly와 JavaScript 패리티를 제공합니다(Wasm 선형 메모리는 WebAssembly.Memory.prototype.grow()
로 크기를 조정할 수 있습니다).
ArrayBuffers 전송하기
ArrayBuffer
객체는 Web Workers 혹은 서비스 워커, structured clone algorithm 사용과 같이 각기 다른 실행 문맥 간에 전송될 수 있습니다. 이는 Worker.postMessage()
혹은 ServiceWorker.postMessage()
호출에서 전송 가능한 객체로 ArrayBuffer
를 전달함으로서 처리될 수 있습니다. 순수한 JavaScript에서는 transfer()
혹은 transferToFixedLength()
메서드를 사용하여 메모리 소유권을 하나의 ArrayBuffer
에서 다른 ArrayBuffer
로 이전할 수도 있습니다.
ArrayBuffer
가 전송되면 원본은 더 이상 사용할 수 없게 되는 분리 상태가 됩니다. 어느 순간에든 실제로 메모리에 접근할 수 있는 ArrayBuffer
의 복사본은 하나만 존재하게 됩니다. 분리된 버퍼는 다음과 같은 동작을 합니다.
byteLength
는 0이 됩니다(버퍼와 연관된 형식화 배열 뷰 모두에서).resize()
와slice()
와 같은 메서드는 호출될 때TypeError
를 발생시킵니다. 연관된 타입이 지정된 배열 뷰의 메서드도TypeError
를 던집니다. 연관된 형식화 배열 뷰의 메서드 역시TypeError
를 발생시킵니다.
ArrayBuffer
가 분리되었는지 여부는 detached
속성으로 확인할 수 있습니다.
생성자
ArrayBuffer()
-
새로운
ArrayBuffer
객체를 생성합니다.
정적 속성
get ArrayBuffer[@@species]
-
파생 객체를 만드는 데 사용되는 생성자 함수입니다.
정적 메서드
ArrayBuffer.isView()
-
arg
유형이 형식화 배열 객체이거나DataView
와 같은 ArrayBuffer 중 하나인 경우,true
를 반환합니다. 그렇지 않으면false
를 반환합니다.
인스턴스 속성
다음 속성은 ArrayBuffer.prototype
에 정의되어 있으며 모든 ArrayBuffer
인스턴스와 공유됩니다.
ArrayBuffer.prototype.byteLength
-
ArrayBuffer의 읽기 전용 크기(바이트)입니다. 배열리 구성될 때 설정되며 변경할 수 없습니다.
ArrayBuffer.prototype.byteLength
-
ArrayBuffer
의 바이트 단위의 크기입니다. 배열이 생성될 때 설정되며,ArrayBuffer
의 크기를 변경할 수 있는 경우에만ArrayBuffer.prototype.resize()
메서드를 사용하여 변경할 수 있습니다. ArrayBuffer.prototype.constructor
-
인스턴스 객체를 만드는 생성자 함수입니다.
ArrayBuffer
인스턴스의 경우ArrayBuffer
생성자가 초기 값입니다. ArrayBuffer.prototype.detached
-
읽기 전용입니다. 만약
ArrayBuffer
가 분리(전송)되었다면true
를 반환하고 그렇지 않으면false
를 반환합니다. ArrayBuffer.prototype.maxByteLength
-
ArrayBuffer
의 크기가 조절 가능한 바이트 단위의 읽기 전용 최대 크기 입니다. 배열이 생성될때 설정되며 변경될 수 없습니다. ArrayBuffer.prototype.resizable
-
읽기 전용압니다.
ArrayBuffer
가 크기 조절이 가능하다면true
를 반환하고 그렇지 않으면false
를 반환합니다. ArrayBuffer.prototype[@@toStringTag]
-
@@toStringTag
속성의 초기값은 문자열"ArrayBuffer"
입니다. 이 속성은Object.prototype.toString()
에서 사용합니다.
인스턴스 메서드
ArrayBuffer.prototype.resize()
-
바이트 단위의
ArrayBuffer
의 크기를 지정된 크기로 재조정합니다. ArrayBuffer.prototype.slice()
-
이
ArrayBuffer
의begin
을 포함한 지점부터end
미만의 바이트가 복사된 새ArrayBuffer
를 반환합니다.begin
또는end
가 음수라면 배열의 시작이 아닌 마지막 인덱스를 참조합니다. ArrayBuffer.prototype.transfer()
-
이 버퍼와 동일한 바이트 내용으로 새
ArrayBuffer
를 생성합니다. 그 다음 이 버퍼를 분리합니다. ArrayBuffer.prototype.transferToFixedLength()
-
이 버퍼와 동일한 바이트 내용으로 크기 조절이 불가한 새
ArrayBuffer
를 생성합니다. 그 다음 이 버퍼를 분리합니다. ArrayBuffer.prototype.slice()
-
컨텐츠의
begin
을 포함한 지점부터end
미만까지 해당ArrayBuffer
의 바이트 복사본인 새ArrayBuffer
를 반환합니다.begin
또는end
가 음수이면 처음부터가 아니라 배열 끝에서 인덱스를 참조합니다.
예제
ArrayBuffer 만들기
이 예에서는 버퍼를 참조하는 Int32Array
뷰가 있는 8바이트 버퍼를 만듭니다.
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);
명세서
Specification |
---|
ECMAScript Language Specification # sec-arraybuffer-objects |
브라우저 호환성
BCD tables only load in the browser