JavaScript에 바이트 배열 저장
이 기사에서는 JavaScript에서 바이트 배열을 저장하는 방법에 대해 설명합니다.
JavaScript의 ArrayBuffer
객체
바이트 배열 또는 바이트 배열은 JavaScript에서 ArrayBuffer
개체로 알려져 있습니다. ArrayBuffer
는 JavaScript 배열에서 파생되지 않으며 메모리에서 변경할 수 없는 고정 길이를 가집니다.
또한 일반적인 JavaScript 배열에서와 같이 ArrayBuffer
개체의 요소에 직접 액세스할 수 없습니다. 읽기/쓰기를 위해서는 별도의 뷰 객체가 필요합니다.
통사론:
new ArrayBuffer(length_in_bytes);
위의 코드는 지정된 바이트 길이로 새 ArrayBuffer
인스턴스를 생성하기 위해 ArrayBuffer
생성자를 호출합니다.
길이가 8바이트인 ArrayBuuffer
를 생성해 보겠습니다.
let myTypedArrayBuffer = new ArrayBuffer(8);
이상적으로는 위의 코드는 8바이트 크기의 새 ArrayBuffer
를 생성해야 합니다. 이제 생성된 ArrayBuffer
객체 myTypedArrayBuffer
의 byteLength
속성을 확인합니다.
암호:
console.log(myTypedArrayBuffer.byteLength);
출력:
예상대로 버퍼의 길이는 8바이트입니다. 각 바이트가 0으로 할당되는 메모리에 8바이트를 할당합니다.
이 버퍼는 바이트를 조작하는 메커니즘을 제공하지 않습니다. 따라서 ArrayBuffer
에서 읽거나 쓰기 위해 유형이 지정된 배열 보기 객체를 사용해야 합니다.
유형이 지정된 배열 보기
형식화된 배열 보기는 바이트 배열, 특히 메모리에 저장된 ArrayBuffer
에 대한 설명을 제공하는 다른 렌즈와 같습니다. 이러한 보기는 부호 있는 정수와 부호 없는 정수 및 부동 소수점과 같은 숫자 유형을 지원합니다.
ArrayBuffer
개체를 조작하기 위해 다음 보기가 구현되었습니다.
유형 | 설명 |
---|---|
Uint8Array |
이 보기는 각 바이트가 별도의 정수가 되도록 ArrayBuffer 바이트를 조작합니다. 1바이트는 8비트를 포함하므로 255개의 부호 없는 정수를 표현할 수 있으며 정수 범위는 0에서 255까지입니다. |
Uint16Array |
이 보기는 버퍼의 모든 2바이트가 0에서 65535 범위의 정수이므로 ArrayBuffer 를 제공합니다. 모든 정수는 부호가 없습니다. |
Uint32Array |
ArrayBuffer 의 모든 4바이트는 정수로 간주됩니다. 따라서 이 뷰는 40억 개 이상의 부호 없는 숫자를 저장할 수 있습니다. |
Float64Array |
Float64Array는 버퍼의 모든 8바이트를 정수로 해석할 수 있습니다. |
보시다시피 다양한 보기를 통해 ArrayBuffer
의 이진 데이터를 다른 숫자 형식으로 해석할 수 있습니다.
JavaScript에서 Typed Array View로 ArrayBuffer
조작
위에서 언급한 모든 형식화 배열 보기는 다음과 같은 동일한 생성자 패턴을 따릅니다.
new TypedArray(buffer); // provides and ArrayBuffer type object
new TypedArray(array_object); // provides an array-like object
new TypedArray(number_of_elements); // provides the number of integers to be in
// the typed array
new TypedArray(another_typed_array); // provides and ArrayBuffer type object
new TypedArray();
JavaScript에는 실제 TypedArray()
생성자가 없습니다. new Uint8Array(), new Float64Array()
와 같은 뷰 생성자 중 하나가 됩니다.
이전 예제에서 이미 생성된 ArrayBuffer(myTypedArrayBuffer)
를 조작하기 위해 새 Uint8Array
보기를 생성해 보겠습니다.
암호:
let unsigned8BitIntView = new Uint8Array(myTypedArrayBuffer);
console.log(unsigned8BitIntView);
출력:
![ArrayBuffer를 조작하기 위해 새 Uint8Array 만들기](</img/JavaScript/ArrayBuffer.png>를 조작하기 위해 새 Uint8Array 만들기
Uint8Array
유형의 배열 객체는 값 0
으로 채워진 모든 바이트로 생성되었습니다.
이 뷰 객체의 길이와 실제 바이트 길이를 검사해 봅시다. 둘 다 8
이어야 합니다.
암호:
console.log(
'Length of the view: ' + unsigned8BitIntView.length +
'.... Byte length of the view: ' + unsigned8BitIntView.byteLength);
위의 두 값을 얻기 위해 Uint8Array
보기에서 length
및 byteLength
속성을 사용했습니다.
출력:
메모리 버퍼에 값을 쓰자.
unsigned8BitIntView[0] = 200;
이제 각 요소를 반복하여 unsigned8BitIntView
개체를 검사할 수 있습니다.
암호:
for (let value of unsigned8BitIntView) {
console.log(value);
}
출력:
200
값이 바이트 배열에 저장되었습니다. 바이트 배열에 300
을 작성해 봅시다.
unsigned8BitIntView[1] = 300;
위의 예에서와 같이 바이트 배열을 다시 반복합니다.
출력:
출력에 따라 정수 300
은 바이트 배열에 기록되지 않았습니다. 이 뷰는 0에서 255
범위의 정수만 쓸 수 있기 때문입니다.
300
은 무시되고 대신 44
로 작성됩니다. 다음은 정수 44
가 생성되는 방법을 보여줍니다.
정수 300
은 이진 형식으로 다음과 같이 쓸 수 있습니다.
100101100
이 보기는 8비트 부호 없는 정수를 해석하므로 첫 번째 비트는 생략하고 나머지 8비트를 고려합니다.
00101100
위의 이진 형식은 정수 44
입니다. 같은 방식으로 모든 형식화된 배열 보기를 사용하여 기본 ArrayBuffer
또는 메모리의 바이트 배열을 조작할 수 있습니다.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.