2017-03-08 17 views
1

에 대한 I 다음 코드를 :"오류 RangeError : 잘못된 형식화 된 배열 길이"겉으로-유효한 입력

new Uint16Array(arraybuffer, 0, 18108); 

내가 arraybufferArrayBuffer의 인스턴스 인 것을 알고, arraybuffer.byteLength하는 arraybuffer의 내용 31984.입니다 나에게는 블랙 박스 다. 버퍼의 byteLength가> 18108이기 때문에, 나는 이것이 단지 작동하기를 기대한다.

크롬 :

RangeError: Invalid typed array length

파이어 폭스 :

TypeError: invalid arguments

이것이 실패 할 수도 있고, 어떻게 내가 열 수없는 ArrayBuffer가 검사 할 수 있습니다 대신에, 나는 다음과 같은 오류를 얻을?

답변

2

음, TypedArray/Uint16Array 생성자를 오해했습니다. 두 번째 인수는 byteOffset이지만 세 번째 인수는 이 아니고이 아닌 바이트 길이입니다. 요소의 길이입니다.

TypedArray에서 문서 : 2

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.

Uint16Array.BYTES_PER_ELEMENT 때문에 arraybuffer 그것을하지 않은, 적어도 2 * 18108 바이트 될 필요가있다.