バッファに格納されているデータに基づいて決定するか、そのデータの解釈に基づいて判断することをお勧めします。
また、Uint8Array
は8ビット配列ではなく、符号なし8ビット整数の配列です。任意の長さにすることができます。 ArrayBuffer
の各バイトがUint8Array
の要素の1つとして「配置」されるため、ArrayBuffer
がと同じであるために作成されるUint8Array
は2倍の長さになりますが、の場合、アレイ内の1つの要素になります。
私たちがバイナリで考えてみると良いことが起こります。これを実行してみてください:
var buffer = new ArrayBuffer(2);
var uint8View = new Uint8Array(buffer);
var uint16View = new Uint16Array(buffer);
uint8View[0] = 2;
uint8View[1] = 1;
console.log(uint8View[0].toString(2));
console.log(uint8View[1].toString(2));
console.log(uint16View[0].toString(2));
バイナリ、2の符号なし8ビット整数は00000010であり、1は00000001(ゼロを主要toString
ストリップ)であるとして表示するので、出力は
10
1
100000010
になるだろう。
Uint8Array
は、バイトの配列を表します。私が言ったように、要素は符号なし8ビット整数です。私たちはちょうどそれに2バイトを押しました。
これらの2バイトは、00000001 00000010(バイナリ形式のものをもう一度明確にするために)として並べて格納されます。今
あなたは同じバイトが含まれているために起こっている同じバッファ上を初期化しますが、要素は、符号なし16ビット整数(2バイト)であるので、あなたがuint16View[0]
にアクセスするときには、最初のを取るために起こっていますバイトし、それらをあなたに戻してください。したがって0000000100000010
は、先頭に0がない100000010
です。
このデータを基本10(10進)整数として解釈すると、基数10(258)には0000000100000010
であることがわかります。
Uint8Array
でもでもデータはすべて保存されません。それらは単にArrayBuffer
のバイトにアクセスする異なる方法です。
howどちらを選択すればよいですか?それは好みに基づいているのではなく、根底にあるデータに基づいています。 ArrayBuffer
は、いくつかの外部ソース(ウェブソケットかもしれない)からバイナリデータを受け取ったときに使用され、すでにがデータを表していることを知っています。これは、符号なし8ビット整数、または符号付き16ビット整数のリスト、または最初の要素が8ビット整数で、次の要素が16ビットであることが分かっている混合リストでもあります。次に、DataView
を使用して、入力項目を読み取ることができます。 データの内容がわからない場合は、使用するものを選択できません。
バッファに格納されているデータに基づいて決定するか、そのデータの解釈に基づいて決定することをお勧めします。 –
また、 'Uint8Array'は8ビット配列ではなく、符号なし8ビット整数の配列です。任意の長さにすることができます。 'Uint16Array'と同じ' ArrayBuffer'から作成された 'Uint8Array'は、' ArrayBuffer'のすべてのバイトが 'Uint8Array'の1つの要素として「配置」されるため、2倍の長さになります。 'Uint16Array'バイトの各ペアは、配列内の1つの要素に「なる」ようになります。 –
@SergiuParaschivあなたは答えとして投稿しておくべきです。あなたはそれを完全に説明しました。 –