在 WebAssembly 实例中将嵌入文件读取为 Uint8Array
Posted
技术标签:
【中文标题】在 WebAssembly 实例中将嵌入文件读取为 Uint8Array【英文标题】:Read embedded file as Uint8Array in WebAssembly instance 【发布时间】:2020-05-04 21:32:35 【问题描述】:我在 WebAssembly wasm 文件中嵌入了一个二进制文件。
考虑这个来源:
embed.ts(使用 AssemblyScript 构建为 embed.wasm):
export const text: u8[] = [83,65,77,80,76,69,10]; // The text "SAMPLE" in UTF-8 encoding
export const textLength: i32 = text.length;
worker.js:
const instance = new WebAssembly.Instance(/* read embed.wasm */).exports;
instance.textLength // prints 7, correct
instance.text // prints, 10232 of type number, ?!?!?
我怎样才能读出这个字节数组来重建嵌入的文件?我需要重新创建 Uint8Array,以便在 worker.js 中保存文件或将其流式传输到某处。
【问题讨论】:
【参考方案1】:当前阶段的WebAssembly 只能在wasm 模块和javascript 主机之间传递数字,因此instance.text
只是数字(指针)或线性内存中的偏移量。为了从该内存中读取真实数据,您可以使用loader 中的__getUint8Array
或__getArray
。还有useful info
【讨论】:
Bingo 感谢@MaxGraey 为我指明了方向,我使用了已加载的文件并完美地提取了文件。以上是关于在 WebAssembly 实例中将嵌入文件读取为 Uint8Array的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Blazor WebAssembly 中将 Json 结果转换为字符串?
如何在 GitLab Pages 中将 Blazor WebAssembly 部署为静态站点