0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ArrayBufferって何者?

Last updated at Posted at 2023-10-17

はじめに 

突如出現し、???となったものです。

ArrayBuffer バイナリー(0,1のみの2進数で表現される)データを格納するためのオブジェクト

バイナリーデータを扱う際に登場するようです。
メモリ領域を確保してデータを操作をするために使用するようですが、
私はあまり機会がなかったので、触り部分のみですが調べてみた記録です

まずArrayBuffer()でメモリ空間を確保する

ArrayBuffer(引数)
引数に、"確保したいメモリのバイト量"の数値を入れる
 → インスタンス化と同時に、メモリ空間が指定したバイト数分確保される

ArrayBuffer作成
const buf  = new ArrayBuffer(100);
// 100バイトのメモリ空間を確保したArrayBufferオブジェクトが作成される

ArrayBufferのデータ操作をするには

主に2つの方法でやるらしい。
・TypedArray
・DataView

今回はTypedArrayの方法についてちょこっと。
 TypedArrray:配列風のビュー
下記のように作ることができる

ArrayBufferの操作
const TypedArrayView = new Uint8Array(buf);  
// 先のコードで作成したArrayBufferオブジェクトのメモリ空間へアクセスするための型付き配列を作る

 Uint8Array(buf)
バイナリーデータが入った ArrayBufferオブジェクトを
8bit(符号なし)でアクセスし、整数値の配列に変換
 (8桁ずつ整数値に変換するイメージですかね。)

bufArrayBuffer(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

とりあえず

かなり浅い調査ですみません・・・

メモリ領域を確保してデータを操作する、という行為はごく一般的とのことですが、
私にとっては初めてだったので考え方からちょっと苦戦しました。

具体的な操作については徐々に深掘りしていこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?