2017-03-08 3 views
1

Je l'extrait de code suivant:« RangeError: longueur du tableau non valide typé » pour les entrées apparemment valides

new Uint16Array(arraybuffer, 0, 18108); 

Je sais que arraybuffer est une instance de ArrayBuffer, et que arraybuffer.byteLength est 31984. Le contenu du ArrayBuffer est une boîte noire pour moi. Parce que byteLength du tampon est> 18108, je m'attends à ce que cela fonctionne. Au lieu de cela, je reçois les erreurs suivantes:

Chrome:

RangeError: Invalid typed array length

Firefox:

TypeError: invalid arguments

Ce qui pourrait provoquer ce à l'échec, ou comment puis-je inspecter un ArrayBuffer je ne peux pas ouvrir?

Répondre

2

Eh bien, j'ai mal compris le constructeur TypedArray/Uint16Array. Le deuxième argument est un byteOffset, mais le troisième argument est pas longueur d'octet: Il est la longueur dans les éléments.

De 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.

Depuis Uint16Array.BYTES_PER_ELEMENT est 2, la ArrayBuffer devrait être au moins 2 * 18108 octets, qui n'est pas.