Размер Blob, созданный из Uint8Array, дает бессмысленные значения [дубликаты]

Поэтому мне было интересно, почему этот объект Blob имеет size из 5:

var x = new Uint8Array(2);
x[0] = 255;
x[1] = 10;
console.log("Typed array length is " + x.length + ".")
console.log("Typed array byte length is " + x.byteLength + ".")
console.log("Blob size is " + new Blob(x).size + ' "bytes".')

Для меня это не имеет смысла, потому что элемент Uint8Array может храниться внутри байта. (элементы Uint8Array могут обрабатывать значения от 0 до 255.)

Кроме того, изменение x[0] или x[1] похоже на изменение new Blob(x).size. x.byteLength, однако, дает мне ожидаемый результат.

Я не могу найти никакого объяснения этому, хотя я искал везде.


person D. Pardal    schedule 03.05.2018    source источник


Ответы (1)


Конструктор Blob принимает массив буферов, а не единый буфер. Ваш текущий код работает так же, как

new Blob(["255", "10"])

вот почему вы получаете размер 5. Вам нужно будет написать

var x = new Uint8Array([255, 10]);
new Blob([x])
//       ^ ^
person Bergi    schedule 03.05.2018
comment
Вам нужно передать массив Uint8Arrays. - person Bergi; 03.05.2018