You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

由Uint8Array创建的Blob大小数值异常原因咨询

为什么Uint8Array创建的Blob大小是5字节?

这是因为你给Blob构造函数传参的方式不对,导致它没有按你预期的方式处理二进制数据。让我一步步拆解:

问题根源:Blob构造函数的参数要求

Blob的第一个参数应该是一个包含BlobPart类型的数组(比如ArrayBuffer、TypedArray、Blob、字符串等),而不是直接传入单个TypedArray。当你直接传x(Uint8Array实例)时,JavaScript会把它当成一个可迭代对象,遍历它的每个元素——也就是那两个数字255和10。

背后的逻辑:数字转字符串的字节计算

对于遍历到的每个数字,Blob会自动把它转换成对应的字符串,然后将这些字符串作为独立的内容片段拼接起来:

  • 数字255转成字符串是"255",UTF-8编码下占3字节
  • 数字10转成字符串是"10",UTF-8编码下占2字节
  • 两者加起来就是3+2=5字节,这就是你看到的Blob size。

这也解释了为什么修改x[0]或x[1]的值会改变Blob的大小:比如你把x[0]改成1,对应的字符串是"1"(1字节),x[1]改成2,字符串是"2"(1字节),此时Blob size就会变成1+1=2字节。

正确的写法:让Blob识别二进制数据

要让Blob正确处理TypedArray的二进制内容,你需要把它放到一个数组里传入:

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".') // 输出2字节

这样Blob就会把整个Uint8Array当成二进制数据处理,size就和x.byteLength完全一致了。

内容的提问来源于stack exchange,提问作者D. Pardal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:51:06