- 자바 스크립트 유형 배열은 배열과 유사한 객체이며 원시 바이너리 데이터에 액세스하기위한 메커니즘을 제공합니다.
- Array에 저장된 객체는 동적으로 증가 및 감소 할 수 있으며 모든 JavaScript 값을 저장할 수 있습니다. JavaScript 엔진은 내부 최적화를 수행하여 배열 작업이 매우 빠를 수 있습니다.
일반적으로 유형 배열은 일반적 으로 WebGL과 함께 사용되며 ArrayBuffer는 WebGL을 사용할 때 어디에나 있습니다. 브라우저는 WebGL을 통해 그래픽 카드와 통신하며, 이들간에 많은 양의 실시간 데이터 상호 작용이 발생하며 특히 성능 요구 사항이 높습니다. 이들 간의 데이터 통신 은 기존 텍스트 형식이 아닌 성능 요구 사항을 충족하기 위해 바이너리 여야 합니다. .
버퍼 및 뷰 : 형식화 된 어레이 아키텍처
최대한의 유연성과 효율성을 달성하기 위해 JavaScript 유형 배열 (유형 배열)은 구현을 버퍼와 뷰의 두 부분으로 분할합니다. 버퍼 (ArrayBuffer 객체에 의해 구현 됨)는 데이터 블록을 설명합니다. 버퍼에는 형식이 전혀 없으며 콘텐츠에 액세스하는 메커니즘을 제공하지 않습니다. 버퍼 객체에 포함 된 메모리에 액세스하려면 뷰를 사용해야합니다 . 뷰는 데이터를 실제 형식화 된 배열로 변환하기위한 컨텍스트 (즉, 데이터 유형, 시작 오프셋 및 요소 수)를 제공합니다.
ArrayBuffer
ArrayBuffer는 범용 고정 길이 이진 데이터 버퍼를 나타내는 데 사용되는 데이터 유형입니다. ArrayBuffer의 내용을 직접 조작 할 수 없습니다 . 형식화 된 배열의 뷰 또는 버퍼 데이터 형식 을 설명하는 DataView 를 생성하고 이를 사용하여 버퍼의 내용을 읽고 쓸 수 있습니다.
데이터보기
DataView는 버퍼의 모든 데이터를 조작 할 수있는 읽기 및 쓰기 인터페이스를 제공하는 저수준 인터페이스입니다. 이는 다양한 유형의 데이터를 조작하는 시나리오에 매우 유용합니다. 예를 들어, typed array view는 모두 로컬 엔디안 모드 (Endianness 참조)에서 실행되며 엔디안은 DataView를 사용하여 제어 할 수 있습니다. 기본값은 Big-endian이지만 읽기 및 쓰기 인터페이스를 호출하여 Little-endian으로 변경할 수 있습니다.
사용 예 :
<script type="text/javascript">
//创建一个16字节固定长度的缓冲
var buffer = new ArrayBuffer(16);
console.log("创建缓冲:")
console.log(buffer)
if (buffer.byteLength === 16) {
console.log("Yes, it's 16 bytes.");
} else {
console.log("Oh no, it's the wrong size!");
}
// 创建视图
// 此视图将把缓冲内的数据格式化为一个32位的有符号整数数组
var int32View = new Int32Array(buffer);
console.log("视图转换:")
console.log(int32View)
for (var i = 0; i < int32View.length; i++) {
int32View[i] = i * 2;
}
// 将类型化数组转换为普通数组
var array = Array.from(int32View)
console.log("普通数组:")
console.log(array)
</script>
효과: