LoginSignup
0
0

More than 1 year has passed since last update.

型付き配列(typed array)

Last updated at Posted at 2021-06-04

型付き配列(typed array)

とは何か

ArrayBuffer内のデータを読み書きするためのビュー。

ArrayBuffer自身には読み書きする機能はなく、このtyped arrayと別述のDataViewとがその役割を担うことになっている)

これと類似したものとしてDataViewというのがあるが、こちらは「開発者側がバイナリのエンディアンを意識しながら触る必要がある」とかでもない限り使うことは稀で、だいたい型付き配列(typed array)の方を使う。

用途

  • (自身には読み書き機能を持たない)ArrayBufferに対して、データの読み書きを行う
  • ArrayBuffer内のデータに対して、.forEach(), .map(), .lengthなどArrayライクな操作を行う
    • ちなみに、.push()とか.pop()とか(一部Arrayにあるのに)ないやつもある。まぁあったところで、存在意義が謎なので「ぁ確かに」という感じ。

なお後述の通り、typed arrayにはいくつかの種類があるが、

それら違い(用途の使い分け)はそのバイナリ(ArrayBufferの中身)をどう解釈するか(i.e. そのバイナリのデータ単位が何バイトなのか、符号(±)はあり/なしか)であり、

「どう解釈すべきか」の答えは以下の順で探せばだいたい見つかると思われる
1. そのバイナリの生成側の仕様(書)
2. (もし1.がないなら)生成するコードを書いた人の脳内
3. 上記関係なく(ハック的な意味も含み)、あなたがそのバイナリをどう読み(解釈し)たいか

typed arrayの種類

typed arrayには後述の表にまとめたとおり、いくつかの種類がある。

これらはその名前からどんなものか判別可能になっている

<[Int|Uint|Float]><バイト数>Array

- 数値の種類
- Int: 符号あり(±)整数
- 64ビットのときだけ"BigInt"
- Uint: 符号なし(+のみ)整数
- 64ビットのときだけ"BigUint"
- Float: 浮動小数点
- バイト数(8 〜 64バイト)
- "Array": そのまま。「(〜な)配列」ってこと。
- 8ビットにだけ、別途"ClampedArray"というのがいる。後述の表の備考欄を参照のこと。

± / +のみ Int / Float 数値のビット長(バイト長) 値の範囲 備考
Int8Array ± Int 8ビット(1バイト) -128 ~ 127
Uint8Array +のみ Int 8ビット(1バイト) 0 ~ 255
Uint8ClampedArray +のみ Int 8ビット(1バイト) 0 ~ 255 設定しようとした値が 0 〜 255 の範囲外だった場合、 0 または 255 が代わりに設定される(最小値0, 最大値255でキャップされる; Uint8Arrayの場合は、上位桁に繰り上がる)
Int16Array ± Int 16ビット(2バイト) -32768 ~ 32767
Uint16Array +のみ Int 16ビット(2バイト) 0 ~ 65535
Int32Array ± Int 32ビット(4バイト) -2147483648 ~ 2147483647
Uint32Array +のみ Int 32ビット(4バイト) 0 ~ 4294967295
Float32Array ± Float 32ビット(4バイト) 1.2×10-38 ~ 3.4×1038
BigInt64Array ± Int 64ビット(8バイト) 5.0×10-324 ~ 1.8×10308
BigUint64Array +のみ Int 64ビット(8バイト) -263 ~ 263-1
Float64Array ± Float 64ビット(8バイト) 0 ~ 264-1

参照

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