目次
ほとんどの資料では、次のようにビューについて 1 つの文で説明されています。このブログ (ArrayBuffer: Typed Array) のビューについての説明です:
var a = new ArrayBuffer(10)a.byteLength // =>10
ログイン後にコピー
" >
var a = new ArrayBuffer(10)a.byteLength // =>10
ログイン後にコピー
DataView
ホームページ ウェブフロントエンド htmlチュートリアル 型付き配列と ArrayBuffer_html/css_WEB-ITnose について

型付き配列と ArrayBuffer_html/css_WEB-ITnose について

Jun 24, 2016 am 11:24 AM

は型付き配列 (Typed Array) であり、HTML5 で新しく導入された API です。型付き配列を一言で説明すると、JS がバイナリデータを操作するためのインターフェースです。 ご存知のとおり、バイナリ データを直接操作するとプログラムの効率が向上します。JS は従来の配列に対して多くの最適化を行ってきましたが (JS 配列はオブジェクトとして実装されます)、JS 配列の効率はそれほど高くありませんでした。たとえば、WebGL での画像データ送信でネイティブ JS 配列が使用されている場合、ブラウザはグラフィックス カードと通信するときにそれをバイナリ形式に変換する必要があり、時間がかかります。大量のバイナリ データを操作する必要があるからこそ、ArrayBuffer が登場しました。 Canvas (Canvas ノートの Canvas の基本原理を参照してください) では、getImageDate() メソッドを使用して返される ImageData オブジェクトは、HTML 標準では CanvasPixelArray と呼ばれます。値が処理されるため、ArrayBuffer とは異なります。ビューのタイプ Unit8Array は少し異なりますが、その他はすべて同じです (Unit8Array は 0 ~ 255 の数値のみを処理できますが、CanvasPixelArray はそれ以上の数値を処理できます)。型付き配列の概念については、まだ混乱するかもしれません。私が理解している ArrayBuffer の主要な概念を 1 つずつ整理してみましょう:

View (ビュー)

ほとんどの資料では、次のようにビューについて 1 つの文で説明されています。このブログ (ArrayBuffer: Typed Array) のビューについての説明です:

ArrayBuffer は、さまざまな種類のデータを格納できるメモリ領域です。データが異なれば、「ビュー」と呼ばれる保存方法も異なります。

最初に上記の説明を見たときは、「ビュー」の意味がまだ理解できませんでしたが、ArrayBuffer の概念は一旦置いといて、バイナリ データを操作するためのインターフェイスであると想像してください。 8 ビットなどの 2 進数 1 は 00000001 です。したがって、この 1 を操作するときは、1 の形式で操作する必要があります。すると、ここでの 1 はビューになります。 view はバイナリデータとして理解するのが簡単です。 C 言語を知っていれば、この概念を理解するのは難しくありません。たとえば、C 言語の文字列は実際には数値であるため、ここでの文字列も「ビュー」として理解できます。実際、ここでのビューは型付き配列です。

ArrayBuffer の概念

ArrayBuffer は不透明なメモリ領域です (いわゆる不透明とは、直接操作できないデータ ブロックを意味します)。単位はバイト (Byte) で、その byteLength 属性はそのメモリを返します。サイズ。 JS では、コンストラクターの形式で ArrayBuffer 領域を宣言します。

var a = new ArrayBuffer(10)a.byteLength // =>10
ログイン後にコピー

このメモリ領域では、さまざまなビューを使用して任意の数の型付き配列を作成でき、これらの型付き配列は重複することもできます。 8 つの異なる型付き配列 (ビュー) があります。つまり、

Int8Array: 8 ビット符号付き整数、長さ 1 バイト。
  • Uint8Array: 8 ビット符号なし整数、長さ 1 バイト。
  • Int16Array: 16 ビット符号付き整数、長さ 2 バイト。
  • Uint16Array: 16 ビット符号なし整数、長さ 2 バイト。
  • Int32Array: 32 ビット符号付き整数、長さ 4 バイト。
  • Uint32Array: 32 ビット符号なし整数、長さ 4 バイト。
  • Float32Array: 32 ビット浮動小数点数、長さ 4 バイト。
  • Float64Array: 64 ビット浮動小数点数、長さ 8 バイト。
  • ArrayBuffer 領域の重複現象を説明するこのブログの例 (JavaScript での ArrayBuffer の詳細な紹介) を次に示します。
  • var buffer = new ArrayBuffer(12)var x = new Float32Array(buffer, 0, 2)var y = new Float32Array(buffer, 4, 1)x[1] = 7;console.log(y[0]); // 7
    ログイン後にコピー
元の記事での著者の説明は単純すぎます。ここで y[0] が 7 となるのは、バッファの 12 バイトのメモリ領域に、0 バイトから長さ 2 の 32 ビット浮動小数点数 x が宣言されているためです(つまり、x (最初の 8 バイト) を占有し、4 番目のバイトから始まる長さ 1 の 32 ビット浮動小数点数 y を宣言すると、ここでの y と x は実際には重複しており、x はすでに 8 バイトを占有しており、y は から始まります。 4バイト目。それらは重なっているため、x を変更すると必然的に y に影響します。ここで、It の型付き配列の最初の要素は 00000111 から始まるため、y も 00000111、つまり 7 になります。

型付き配列と通常の配列の違い

型付き配列は本質的にバイナリデータであり、ArrayBuffer 領域は指定された長さを持っています。これらに基づいて、型付き配列と通常の配列の違いを推測できます。異なる型を混合できる通常の JS 配列とは異なり、すべて数値です。たとえば、次の例の代入は無効です

型付き配列の長さは固定です
  • すべての要素は次のように初期化されます。 0
var  a = new Int8Array(3)a[0] = 'hello'a[0] // =>0 显示a[0]依然未定义a[0] = '8'a[0]  // = > 8 但是注意类型的自动转换,当可被转换成数字时,JS会自动将其转成数值
ログイン後にコピー

DataView

既然本质是在操作二进制数据,那么就涉及到“高位优先”还是“低位优先”的数据传输问题……

今天太晚啦,明天接着码,未完待续~

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

< Progress>の目的は何ですか 要素? < Progress>の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML< Progress>について説明します。要素、その目的、スタイリング、および< meter>との違い要素。主な焦点は、< Progress>を使用することです。タスクの完了と< Meter> statiの場合

< datalist>の目的は何ですか 要素? < datalist>の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML< Datalist>について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

< meter>の目的は何ですか 要素? < meter>の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html< meter>について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化< Meter> < Progress>およびex

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? HTML5< time>を使用するにはどうすればよいですか 日付と時刻を意味的に表す要素? Mar 12, 2025 pm 04:05 PM

この記事では、html5< time>について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

< iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? < iframe>の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、< iframe>外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

See all articles