はじめに
突如出現し、???となったものです。
ArrayBuffer バイナリー(0,1のみの2進数で表現される)データを格納するためのオブジェクト
バイナリーデータを扱う際に登場するようです。
メモリ領域を確保してデータを操作をするために使用するようですが、
私はあまり機会がなかったので、触り部分のみですが調べてみた記録です
まずArrayBuffer()でメモリ空間を確保する
ArrayBuffer(引数)
引数に、"確保したいメモリのバイト量"の数値を入れる
→ インスタンス化と同時に、メモリ空間が指定したバイト数分確保される
const buf = new ArrayBuffer(100);
// 100バイトのメモリ空間を確保したArrayBufferオブジェクトが作成される
ArrayBufferのデータ操作をするには
主に2つの方法でやるらしい。
・TypedArray
・DataView
今回はTypedArrayの方法についてちょこっと。
TypedArrray:配列風のビュー
下記のように作ることができる
const TypedArrayView = new Uint8Array(buf);
// 先のコードで作成したArrayBufferオブジェクトのメモリ空間へアクセスするための型付き配列を作る
Uint8Array(buf)
バイナリーデータが入った ArrayBufferオブジェクトを
8bit(符号なし)でアクセスし、整数値の配列に変換
(8桁ずつ整数値に変換するイメージですかね。)
buf は ArrayBuffer(100) で "100バイトのArrayBufferを作成したもの" なので
1byte = 8bitということをふまえると
Unit8Array ・・・100個の整数値
Unit16Array ・・・50個の整数値
Unit32Array ・・・25個の整数値
の配列を作成できるようです
※ただしInt64Arrayをしようとすると
ArrayBufferを8バイトずつ変換しようとするので
8で割り切れるバイト数じゃないと(今回は100なので)エラーが出るみたい
データへのアクセス
TypedArrayView[0] とすれば 1つ目の整数値に参照
TypedArrayView[1] とすれば 2つ目の整数値に参照
TypedArrayView[4] とすれば 5つ目の整数値に参照
できるそうです。
データの書き換え
仮に1つ目の数字[0]が "5"であったとき
TypedArrayView[0]=10 として 書き換えると、
元のArrayBufferデータ(buf)も書き換えられる。
(伝わるかな)
▪️(参考)型付き配列のサブクラス詳細
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array
とりあえず
かなり浅い調査ですみません・・・
メモリ領域を確保してデータを操作する、という行為はごく一般的とのことですが、
私にとっては初めてだったので考え方からちょっと苦戦しました。
具体的な操作については徐々に深掘りしていこうと思います。