在 WebAssembly 和 JavaScript 之间传输字节数组 (Uint8Array)



我在 WebAssembly 代码中有一个 u8[] 数组,如何在常规 JS 中读取它?调用它只是返回我一个 i32。

// Load module WebAssembly.Instance
const instance = await getInstance("./build/embed.wasm");
// Try to get the array of bytes from the module
const embeddedFileBytes = Uint8Array.from(instance.fileBytes);
// write the file to disc
await writeFile("./output.text", embeddedFileBytes);
// check the hash is the same as the original file that was embedded
expect(sha1("./output.text")).toEqual(sha1("./input.text"))

Webassembly 模块具有导出:

export const fileBytes: u8[] = [83,65,77,80,76,69,10];

WebAssembly 是一个仅支持数值类型的低级虚拟机。更复杂的类型,如字符串、结构和数组,被编码在 WebAssembly 的线性内存中 - 这是一个连续的内存块,WebAssembly 和 JavaScript 都可以读取和写入。

fileBytes返回的值不是数组本身,而是指向数组在线性内存中的位置的指针。为了从数组中获取数据,您需要从线性内存中读取数据 - 与读取字符串的方式大致相同,如以下问题中所述:

如何从 WebAssembly 函数返回 JavaScript 字符串

如果你不想自己写这个"胶水"代码,我建议你看看wasm-bindgen

相关内容

  • 没有找到相关文章

最新更新