【问题标题】:How to check if an ArrayBuffer is detached or transfered in JS?如何检查 ArrayBuffer 是否在 JS 中分离或转移?
【发布时间】:2018-08-15 09:21:38
【问题描述】:

我最近正在使用 Web Workers 和 Buffers。

现在我有一个缓冲区,我想使用SmartBuffer 检查第六个字节。如果该字节为 0,则发送给 worker1。否则,发送给worker2。

const buffer = SmartBuffer.fromBuffer(someBuffer);
if(buffer.toBuffer()[5] === 0){
    worker1.postMessage(someBuffer, [someBuffer]);
}
if(buffer.toBuffer()[5] === 1){
    worker2.postMessage(someBuffer, [someBuffer]);
}

由于我使用了可转移对象,如果someBuffer 已被转移,我将无法再在第 5 行访问它。 (会报错:Cannot perform Construct on a detached ArrayBuffer。)

我知道这是一个不好的例子,我可以简单地使用else if 来防止这个错误。但问题是:有什么方法可以知道缓冲区是否已转移?

【问题讨论】:

    标签: javascript buffer web-worker arraybuffer


    【解决方案1】:

    分离的 ArrayBuffer 的 byteLength 属性和使用此 ArrayBuffer 的每个类型化数组都将为零。

    我不确定 SmartBuffer 库的内部结构,但此检查应该有效:

    someBuffer.byteLength === 0
    

    如果您想检查初始 byteLength 为零的 ArrayBuffer,这当然无济于事。在这种情况下,如果它被分离,什么都不会改变。但我认为这只是理论上的问题。

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2012-11-08
      • 2012-04-04
      • 2019-01-25
      • 1970-01-01
      相关资源
      最近更新 更多