首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在分离的ArrayBuffer.prototype.slice上执行ArrayBuffer

无法在分离的ArrayBuffer.prototype.slice上执行ArrayBuffer
EN

Stack Overflow用户
提问于 2016-12-11 02:35:21
回答 2查看 2.9K关注 0票数 1

我正在尝试使用BlobArrayBuffer创建.slice(),因为我需要复制ArrayBuffer,因为我知道将来它将被代码更改(它的byteLength将是0),而代码是我没有控制/想要更改的。

代码语言:javascript
复制
new Blob([data2.payload.slice()], {type: "video/MP2T"})

我会犯错误

代码语言:javascript
复制
Cannot perform ArrayBuffer.prototype.slice on a detached ArrayBuffer

在……上面

代码语言:javascript
复制
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36

在Windows7 x64上。

还有其他复制ArrayBuffer的方法吗?这样就不会有实际的复制其他方法似乎并不是很简单。

ArrayBuffer.transfer()看起来不错,但是他们的填充会产生错误

代码语言:javascript
复制
Source and destination must be ArrayBuffer instances
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-11 03:27:33

这是我的错,我被不清楚的错误信息弄糊涂了,在这种情况下什么也做不了,因为在Blob创建data2.payload的时候,byteLength: 0已经存在了。

而在通常情况下

代码语言:javascript
复制
var from = new ArrayBuffer(0);
var to = from.slice();
var to = from.slice(0);

to将是带有byteLength: 0ArrayBuffer,在本例中是触发错误,因为在data2.payload传递给我的代码之前,它在worker中被修改,为了避免在主线程和worker之间复制片段,data2.payload所有权被传递给工作人员。

票数 2
EN

Stack Overflow用户

发布于 2016-12-11 02:43:22

尝试使用new Blob([new Uint8Array(data2.payload.slice(0))], {type: "video/MP2T"})

这把小提琴中看到它

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41082427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档