ES 6のバイナリ

4845 ワード

JavaScript操作バイナリデータのインターフェースはそれぞれArayBufferオブジェクト、TypeArayビュー、DataViewビューであり、ES 6はそれらをECMAScript規格に組み入れ、それらは配列の文法でバイナリデータを処理するので、総称してバイナリ配列と呼ぶ.
JSの下のバイナリ配列はC言語の配列によく似ています.開発者は配列下付きの形式でメモリを直接操作することができます.
バイナリ配列は3種類のオブジェクトから構成されています.
  • ArayBufferオブジェクト:メモリの中のバイナリデータの一部を表し、「ビュー」で動作することができます.「ビュー」は配列インターフェースを展開しており、これは配列の方法でメモリを操作できることを意味している.
  • TypedArayビュー:全部で9種類のビュー、例えばUint 8 Aray Int 16 Aray配列ビュー、Float 32 Aray配列図
  • を含みます.
  • DataViewビュー:最初のバイトがuint 8、第2のバイトがInt 16、第4のバイトがFloat 32などの複合フォーマットのビューをカスタマイズすることができ、さらにカスタムバイトができます.
  • まとめてArayBufferオブジェクトは元のバイナリデータを表し、TypedArayビューは単純なタイプのバイナリデータを読み書きするために使用され、DataViewは複雑なタイプのバイナリデータを表すために使用される.
    TypedArayビューでサポートされているデータの種類は全部で9種類あります.
    データの種類
    バイト長
    意味
    対応するC言語のタイプ
    Int 8
    1
    8ビット符号付き整数
    Signed char
    Uint 8
    1
    8ビット符号なし整数
    Unisigned char
    Int 16
    2
    16ビット
    ショート?ト
    U int 16
    2
    unsigned shart
    Int 32
    4
    32ビット
    要点
    Uint 32
    4
    32ビット
    Unisigned int
    Float 32
    4
    32ビット浮動小数点
    float
    Float 64
    8
    64ビット浮動小数点
    ドビー
    バイナリ配列は本物の配列ではなく、タイプ配列のオブジェクトです.
    1.アラーBuffer対象
    ArayBufferオブジェクトは、バイナリデータを格納するメモリの一部を表しています.直接に読み書きすることはできません.インテリジェントは、ビュー(TypedArayビューとDataViewビュー)を通して読み書きします.いわゆるビューとは、指定されたフォーマットでバイナリデータを解読することです.
    const buf = new ArrayBuffer(32);
    //            0
    
    この内容を読むためには、ビューを指定する必要があります.DataViewビューの作成には、パラメータとしてArayBufferオブジェクトのインスタンスを提供する必要があります.
    const buf = new ArrayBuffer(32);
    const dataview = new DataView(buf);
    dataview.getUint(0); // 0
    
    typeArayビューも使用できますが、DataViewとは異なる点は、構造関数ではなく一群の構造関数であり、異なるデータフォーマットを表しています.
    const buffer = new ArrayBuffer(32)
    const x1 = new Int32Array(buffer);
    const x2 = new Uint8Array(buffer);
    
    
    上記のコードは同じセグメントのメモリに対して、それぞれ二つのビューを確立します.32ビットの符号付き整数と8ビットの符号なし整数.下の段は同じメモリなので、すべての異なるビューオブジェクトがこのメモリを操作すると、相互に影響します.
  • ArayBuffer.prototype.byteLength:ArayBufferの例のbyteLength属性は、割り当てられたメモリ領域のバイト長
  • を返します.
  • ArayBuffer.prototype.slice(例)メモリ領域の一部を話し、新たなArayBufferオブジェクト
    const buffer = new ArrayBuffer(8);
    const newBuffer = buffer.slice(0,3);//       ArrayBuffer  
    
  • をコピーして生成するslice方法がある.
  • ArayBuffer.isView()静的方法は、パラメータがArayBufferであるかどうかを示すブックレンを返す.
    TypedArayビュー
    ArayBufferオブジェクトはメモリ領域として、様々なタイプのデータを格納することができます.同じセグメントのメモリでは、データによって読み方が異なります.これを『ビュー』といいます.
    TypedArayは全部で9種類あります.各ビューは構造関数です.
  • Int 8 Aray
  • Uint 8 Aray
  • Uint 8 ClampedAray
  • Int 16 Aray
  • Uint 16 Aray
  • Int 32 Aray
  • Uint 32 Aray
  • Float 32 Aray
  • Float 64 Aray
  • 基本的には配列に従ってすべてのデータを処理することができますが、まだ少し違っています.
  • TypedAray配列の全メンバーは、同じタイプの
  • です.
  • TypedAray配列のメンバーは連続的で、空きがない
  • .
  • TypedAray配列メンバーのデフォルト値は0で、new Aray(10)にはメンバーがいません.10席しかないです.new Uint 8 Aray(10)はTypedAray配列に戻ります.中の10人のメンバーは全部0
  • です.
  • TypedAray配列は1つのビューだけであり、自身はデータを保存しない.そのデータはすべて下のArayBufferオブジェクトの中に保存されており、下のオブジェクトを得るためにはバffer属性を使用しなければならない.
  • コンストラクタ:
    TypedAray(buffer、byteOffset=0、length?)
    同じArayBufferオブジェクトの上に、異なるデータタイプによって複数のビューを作成することができます.
    配列方法
  • Type.prototype.co pyWithin(taget,start,end)
  • Type.prototype.entries()
  • Type.prototype.every
  • Type.fill(value、start=0、end=this.length)
  • Type.prototype.filter
  • Type.prototype.find(predicate,thisargs?)
  • Type.prototype.findIndex(predicate,thisargs)
  • Type.prototype.forEach(calbackfn、thisAgs)
  • Type.prototype.indexOf(search Element,from Index)
  • Type.join
  • Type.keys()
  • Type.prototype.lastIndexOf(search Element、from Index?)
  • Type.prototype.map(calbackFn,thisAgs?)
  • Type.prototype.reduce(calbackfn、initial Value?)
  • Type.reverse()
  • Type.prototype.slice(start=0.End=this.length)
  • Type.prototype.some
  • Type.prototype.sort
  • Type.toString()
  • Type.prototype.values()
  • バイト順
    バイト順とは、データをメモリに表示する方法です.
  • 小端バイト順x 86システムのコンピュータは、すべて小端バイト順を採用しており、比較的重要なバイトは後のメモリアドレスに並べられており、重要ではないバイトは前のメモリアドレスに並ぶ.
  • 大端バイト順は、多くのネットワークデバイスと特定のオペレーティングシステムが採用しているのは、大端バイト順
  • である.
    問題が発生したのはすべてのTypedAray配列の内部において、小さなバイトでデータを読み取ります.一段のデータが大端バイト順であれば、typedAray配列は正しく解析できなくなります.この場合は、DataViewオブジェクトだけを採用して、バイト順を設定します.
    DataViewビュー
    DataViewビューは、より多くの操作オプションを提供し、バイト順の設定をサポートしています.本来、設計目的では、ArayBufferオブジェクトの様々なTypedArayビューは、ネットワークカード、サウンドカードの列の自機デバイスにデータを送信するために使用されます.DataViewビューの設計目的は、ネットワークデバイスから送信されたデータを処理するためであるので、大端バイト順または小端バイト順は、自分で設定することができる.
    DataView(ArrayBuffer buffer[      [,  ]])
    
    DataViewの場合、TypedArayの例と同じ名前の方法を意味する属性があります.
  • DataView.prototype.buffer:対応するアラビバッファerオブジェクト
  • を返します.
  • DataView.prototype.byteLength:占有メモリバイト長
  • を返す.
  • DataView.prototype.byteOffset:現在のビューを返すことは、対応するアラビバッファerオブジェクトのどのバイトから開始されるか
  • を参照してください.