Javascript 无法在分离的ArrayBuffer上执行ArrayBuffer.prototype.slice
我正在尝试使用Javascript 无法在分离的ArrayBuffer上执行ArrayBuffer.prototype.slice,javascript,web-worker,arraybuffer,Javascript,Web Worker,Arraybuffer,我正在尝试使用.slice()从ArrayBuffer创建Blob,因为我需要复制ArrayBuffer,因为我知道它将来会被我无法控制/想要更改的代码更改(其bytellength将为0) new Blob([data2.payload.slice()], {type: "video/MP2T"}) 我得到了一个错误 Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer 在 在Windows7x64上 是否
.slice()
从ArrayBuffer
创建Blob
,因为我需要复制ArrayBuffer
,因为我知道它将来会被我无法控制/想要更改的代码更改(其bytellength
将为0)
new Blob([data2.payload.slice()], {type: "video/MP2T"})
我得到了一个错误
Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer
在
在Windows7x64上
是否有其他方法可以复制阵列缓冲区?
看起来不错,但他们的多边形填充会产生错误
Source and destination must be ArrayBuffer instances
尝试使用newblob([newuint8array(data2.payload.slice(0))],{type:“video/MP2T”})
从中看到它
这是我的错,我被不清楚的错误消息弄糊涂了,在这种情况下,由于在创建Blob
数据2的那一刻,什么也做不了。有效载荷已经通过tellength:0
拥有
而在通常情况下
var from = new ArrayBuffer(0);
var to = from.slice();
var to = from.slice(0);
to
将ArrayBuffer
与ByTeleLength:0
,在这种情况下是触发错误,因为在data2.payload
传递到我的代码之前,它在web worker中被修改,以避免复制主线程和web worker之间的片段,data2.有效负载
所有权转移给工作进程。尝试过,结果相同。尝试使用UInt8Array创建Blob。这对我以前是有效的。尝试过之后,它现在不会复制ArrayBuffer
。Naaa,并且在“1.让数字为TonNumber(参数)。[…]3.如果数字为NaN,则返回+0.”和number(未定义)
返回NaN
,因此ToInteger
中的+0
,以及number(null)
返回0
,因此,您也可以省略slice(begin[,end])
的begin
参数,它将默认为0
。是的,我认为它应该默认为零。但我只能想到这两个原因,它们极有可能出错。引用得很好。@SenJacob新数据视图(arrayBuffer)
不起作用,因为它实际上没有复制任何东西。它的ByTeleLength如何设置为0?啊,是的,可转移。。。忘了它,是的,它解释了你所有的错误。
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://fiddle.jshell.net/img/logo.png", true);
xhr.responseType = "arraybuffer";
xhr.onload = function(e) {
var binaryArray = new Uint8Array(this.response.slice(0)); // use UInt8Array for binary
var blob = new Blob([binaryArray], { type: "image/png" });
var URL = window.URL || window.webkitURL;
var imageUrl = URL.createObjectURL(blob); // create url
document.getElementById("image").src = imageUrl;
};
xhr.send();
var from = new ArrayBuffer(0);
var to = from.slice();
var to = from.slice(0);