如何在Javascript中将一个`ArrayBuffer`转换为`SharedArrayBuffer`?

5

请看以下代码片段:

const arr = [1.1, 2.2, 3.3]
const arrBuffer = (Float32Array.from(arr)).buffer

如何将 ArrayBuffer 转换成 SharedArrayBuffer


请注意,这里不需要解释和改变HTML标签。
const sharedArrBuffer = ...?

也许 slice 可以帮助你 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/slice - Vadim Hulevich
@VadimHulevich 怎么办?在 ArrayBuffer 上调用 slice 方法会返回另一个 ArrayBuffer,而不是 SharedArrayBuffer - Tom
1个回答

8
请注意,ArrayBufferSharedArrayBuffer都是后备数据指针,您只能通过类型化数组(例如Float32Array)与其进行交互。Array Buffers代表内存分配,并且无法“转换”(只能用类型化数组表示)。
如果您已经有一个类型化数组,并需要将其复制到新的SharedArrayBuffer中,则可以使用set完成此操作。
// Create a shared float array big enough for 256 floats
let sharedFloats = new Float32Array(new SharedArrayBuffer(1024));

// Copy floats from existing array into this buffer
// existingArray can be a typed array or plain javascript array
sharedFloats.set(existingArray, 0);

通常情况下,您可以拥有一个单一的数组缓冲区并通过多个“类型镜头”与其交互 - 因此,基本上将数组缓冲区转换为不同的类型(例如Float32和Uint8)。但是您无法将ArrayBuffer转换为SharedArrayBuffer,您需要复制其内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接