すべての JavaScript 学習者は、JS のさまざまな基本的なデータ型を理解できると思います。これは非常に基本的で単純な概念であり、学習するのは難しくありません。それは問題だ。ただし、この記事で焦点を当てているのは、通常目にする Array ではなく、ArrayBuffer です。
私が書いている内容の多くは、特定の機能を完了したいために意図的に要約されており、この記事についても同様です。少し前に、私は Web オーディオ API と音声通信関連の知識を勉強してきました。その内容は、AudioContext のさまざまなノード間のオーディオ ストリームのフローに焦点を当てていました。今度は、オーディオがどのようなデータ形式であるかを調べる必要があります。ストリームの最後なので、ArrayBuffer の研究は非常に重要です。
メモリ内の配列スタック モデル
配列の取得
JavaScript で配列を生成する方法:
直接定義するか、コンストラクターを通じて配列を作成することもできます。もちろん、他のメソッドも使用できます。
待ってください、方法はたくさんあります。しかし、Array の内部構造は何なのか、まだよくわかっていない人も多いと思います。
スタックモデル
配列には、次のようなさまざまなデータ型を入れることができます。
上記の配列には、数値、文字列、オブジェクト、関数、未定義、null が含まれています。上記のデータ インターフェイスを具体的に説明します。
JavaScript のデータ型は、数値型や文字列型などの値型の場合、値型と参照型の 2 種類に分けられます。 C 言語で説明すると、データはヒープ内の特定の範囲に保存されます。 。スタックは独立しておらず、ヒープにスタックを格納することもできます。
Array の説明はこれで終わりです。ArrayBuffer の関連知識について詳しく説明しましょう。
配列バッファ
ウェブとは何ですか? ウェブ上で議論されるべき最も基本的な問題は何ですか? 2つの点があると思います。1つはデータ、もう1つはデータの送信です。これはWebの上位層にあるものである必要があります。この記事で説明する ArrayBuffer は、最も基本的なデータ型であり、他のメソッドで読み書きする必要があるデータです。
公式ポイント定義:
ArrayBuffer は、汎用の固定長バイナリ データ バッファーを表すために使用されるデータ型です。ArrayBuffer の内容を直接操作することはできません。代わりに、特定のバッファーを表す ArrayBufferView オブジェクトを作成します。形式を設定し、それを使用してバッファの内容を読み書きします。
さまざまな型付き配列のデータを格納するために使用されるバイナリ データの生のバッファーを表します。 ArrayBuffer を直接読み書きすることはできませんが、生のバッファーを型付き配列または DataView オブジェクトに渡すことで、必要に応じて解釈できます。
これはバイナリ データの生のバッファです。JavaScript は型指定が弱い言語ですが、それ自体、データの型とサイズに制限があります。ある種のデータ構造を通じてバッファの内容を順序付ける必要があります。 (書き込んでください)。
生バッファーの作成
生のバッファーは ArrayBuffer コンストラクターを通じて作成できます:
Chrome コンソールから確認できます:
バッファ インスタンスには、バッファのサイズを取得するために使用される byteLength 属性と、IE11 と ios6 でのみサポートされ、バッファ長をインターセプトするために使用されるスライス メソッドがあります。
このデモをテストできます:
型付き配列型は、インデックス付けおよび操作できる ArrayBuffer オブジェクトのさまざまなビューを表します。 すべての配列型は固定長です。
Float32Array は、各要素が 32 ビット (4 バイト) の浮動小数点データであることを除いて、Array と非常によく似ています。 Float32Array が作成されると、そのサイズは変更できません。
Float32Array を直接作成できます:
このような概念が必要です。これは配列ですが、配列内の各要素は Float 32 ビット データ型です。別の例:
配列の値を Float32Array オブジェクト x に直接代入し、保存する前に 32 ビット浮動小数点数に変換します。
このタイプの配列の各要素は同じ型であるため、スタック モデルではすべてスタックにプッシュされます。したがって、データ配列は参照型ではなく値型です。これは注目を集めるはずであり、次の例からも反映されています:
x の値を y にコピーし、x[0] を変更します。y[0] は変更されません。
上記の方法に加えて、他の方法でもデータ配列を作成できます。
これが 7 を返す理由を説明してください。
- - - - - - - - - - - - -
|0|1|2|3|4|5|7|8|
- - - - - - - - - - - - -
y
作成者: バレット・リー
上の図を読んでも、まだ質問がありますか?これ以上説明する必要はないと思います。 ArrayBuffer の単位は 1、Float32Array の単位は 4 と考えることができます。
DataView オブジェクトはデータをより詳細に操作しますが、上記で説明したさまざまなデジタル化された配列は基本的にアプリケーションの要件を満たすことができるため、ここでは簡単な例を挙げて簡単に説明します。
コードをコピー
ご興味がございましたら、http://www.javascripture.com/DataView にアクセスして詳細をご覧ください。
XHR2 の ArrayBuffer
ArrayBuffer は、WebSocket、WebAudio、Ajax など、フロントエンドでビッグデータを処理する場合、またはデータ処理パフォーマンスを向上させたい場合には、特に広く使用されており、ArrayBuffer は不可欠です。
XHR2 は新しいものではありません。関連機能を使用したことはあっても、これが XHR2 のコンテンツであることは知らなかったかもしれません。最も重要なのは、xhr.responseType です。その機能は、応答のデータ形式を設定することです。オプションのパラメーターは、「text」、「arraybuffer」、「blob」、または「document」です。 xhr.responseType = '' を設定 (または省略) すると、デフォルトの応答が「text」になることに注意してください。ここにそのような対応があります:
例を挙げてください:
xhr.onload = function(e) {
// this.response == uInt8Array.buffer
var uInt8Array = new Uint8Array(this.response);
};
概要
この記事では、主にスタック モデルにおける Array の格納方法を紹介し、Web 開発においてデータとデータ ストレージが重要な部分である ArrayBuffer のバイナリ データ型についても詳しく説明します。注意!この記事の説明に誤りがある可能性がありますので、修正してください。