2017-03-08 6 views
1

Ich habe folgende Code-Schnipsel:„Auslöser Range: Ungültige typisierten Feldlänge“ für scheinbar gültige Eingaben

new Uint16Array(arraybuffer, 0, 18108); 

Ich weiß, dass arraybuffer eine Instanz von ArrayBuffer ist, und dass arraybuffer.byteLength ist 31984. Der Inhalt des Arraybuffer ist eine Blackbox für mich. Da der ByteLength des Puffers> 18108 ist, erwarte ich, dass dies einfach funktioniert. Stattdessen bekomme ich folgende Fehler:

Chrome:

RangeError: Invalid typed array length

Firefox:

TypeError: invalid arguments

Was könnte dies dazu führen, scheitern, oder wie kann ich zu inspizieren eine Arraybuffer ich nicht öffnen kann?

Antwort

2

Nun, ich missverstand den TypedArray/Uint16Array-Konstruktor. Das zweite Argument ist ein byteOffset, aber das dritte Argument ist nicht Byte Länge: Es ist Länge in Elementen.

Von TypedArray docs:

length

When called with a length argument, an internal array buffer is created in memory of size length multiplied by BYTES_PER_ELEMENT bytes containing 0 value.

Seit Uint16Array.BYTES_PER_ELEMENT 2 ist, würde die Arraybuffer müssen mindestens 2 * 18108 Bytes lang sein, was es nicht ist.

Verwandte Themen