ArrayBuffer

ArrayBuffer 객체는 일반적인 원시 바이너리 데이터 버퍼를 표현하는 데 사용됩니다.

다른 언어에서는 종종 "바이트 배열"이라고 부르는 바이트 배열입니다. ArrayBuffer의 내용을 직접 수정하는 것은 불가능하지만, 대신 버퍼를 특정 형식으로 나타내는 형식화 배열이나 DataView 객체 중 하나를 생성하여, 이를 통해 버퍼의 내용을 읽거나 쓸 수 있습니다.

ArrayBuffer() 생성자는 주어진 길이(바이트)를 가진 새로운 ArrayBuffer를 생성합니다. Base64 문자열이나 로컬 파일 (en-US)과 같은 기존 데이터에서도 배열 버퍼를 생성할 수 있습니다.

ArrayBufferTransferable objects (en-US)입니다.

설명

ArrayBuffers 크기 조절하기

ArrayBuffer 객체는 ArrayBuffer() 생성자를 호출할 때 maxByteLength 옵션을 포함하여 크기를 조정할 수 있도록 만들 수 있습니다. ArrayBuffer의 크기를 조정할 수 있는지 여부 그리고 최대 크기는 각각 resizablemaxByteLength 속성에 접근하여 질의 할 수 있습니다. resize() 호출로 크기 조정이 가능한 ArrayBuffer에 새 크기를 할당할 수 있습니다. 새 바이트는 0으로 초기화됩니다.

이러한 기능을 사용하면 ArrayBuffer의 크기를 더 효율적으로 조정할 수 있습니다. 그렇지 않으면 새로운 크기로 버퍼의 복사본을 만들어야 합니다. 또한 이와 관련하여 WebAssembly와 JavaScript 패리티를 제공합니다(Wasm 선형 메모리는 WebAssembly.Memory.prototype.grow() (en-US)로 크기를 조정할 수 있습니다).

ArrayBuffers 전송하기

ArrayBuffer 객체는 Web Workers 혹은 서비스 워커, structured clone algorithm 사용과 같이 각기 다른 실행 문맥 간에 전송될 수 있습니다. 이는 Worker.postMessage() (en-US) 혹은 ServiceWorker.postMessage() (en-US) 호출에서 전송 가능한 객체 (en-US)ArrayBuffer를 전달함으로서 처리될 수 있습니다. 순수한 JavaScript에서는 transfer() (en-US) 혹은 transferToFixedLength() (en-US) 메서드를 사용하여 메모리 소유권을 하나의 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()

ArrayBufferbegin을 포함한 지점부터 end미만의 바이트가 복사된 새 ArrayBuffer를 반환합니다. begin 또는 end가 음수라면 배열의 시작이 아닌 마지막 인덱스를 참조합니다.

ArrayBuffer.prototype.transfer() (en-US)

이 버퍼와 동일한 바이트 내용으로 새 ArrayBuffer를 생성합니다. 그 다음 이 버퍼를 분리합니다.

ArrayBuffer.prototype.transferToFixedLength() (en-US)

이 버퍼와 동일한 바이트 내용으로 크기 조절이 불가한 새 ArrayBuffer를 생성합니다. 그 다음 이 버퍼를 분리합니다.

ArrayBuffer.prototype.slice()

컨텐츠의 begin을 포함한 지점부터 end미만까지 해당 ArrayBuffer의 바이트 복사본인 새 ArrayBuffer를 반환합니다. begin 또는 end가 음수이면 처음부터가 아니라 배열 끝에서 인덱스를 참조합니다.

예제

ArrayBuffer 만들기

이 예에서는 버퍼를 참조하는 Int32Array 뷰가 있는 8바이트 버퍼를 만듭니다.

js
const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);

명세서

Specification
ECMAScript Language Specification
# sec-arraybuffer-objects

브라우저 호환성

BCD tables only load in the browser

같이 보기