我有一个纯 Uint8Array 我想保存到一个 blob 中
我可以使用任何类型(“文本/纯文本”、应用程序/八位字节流等)创建 blob ..
var a_blob = new Blob(Uint8Array,{type: whatever});
后来测试结果我有:
this.read_blob = function (blob) {
var reader = new FileReader();
reader.onloadend = function (evt)
{ var full_buffer = evt.target.result; }
reader.readAsArrayBuffer(blob);
}
我已经存储了 1 219 2 0 个值(使用 Uint32Array 的 4 个值)并且我检查了一切都正确。
现在,我有:(我想检查 blob 值)
var data = new Uint32Array (full_buffer,0,4);
我有 :
0: 808464433
1:809054514
2:808464432
3:808464432
????????????
如果我使用:
var data = new Uint8Array (full_buffer,0,4);
我有 :
[49,48,48,48,50,49,57,48,48,...] 是 1 0 0 0 2 1 9 0 ....
(我的值(value)观的字符串表示......)
我在做什么坏事?
也许 blob 并没有真正保存为纯二进制数据?
fullbuffer 是二进制字符串对象吗?
我必须使用特定类型吗?
我是否以不同的方式读取缓冲区?
必须在循环中创建一个关联 full_buffer 单个数据的 Uint8Array 吗?
最佳答案
已解决
如 MDN解释:要创建一个 blob,你必须使用
blob = new Blob(part,type);
part = 要放入新 Blob 对象的数据对象数组。
所以解决方法(不容易发现,因为自己正在看到一个又一个的时间数组,bufferarray,typedarrays...。你感到困惑)是使用 [] 括号动态创建一个元素数组。
所以而不是:
var a_blob = new Blob(Uint8Array,{type: whatever});
用
var a_blob = new Blob([Uint8Array],{type: whatever});
相信我,经过大量网络搜索后,您可以看到帖子,其中可以看到带括号和不带括号的 blob 创建
关于Javascript 如何使用纯二进制数据创建和使用 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25785682/