查看函数签名js_sys::Uint8Array::new_with_byte_offset_and_length
pub fn new_with_byte_offset_and_length(
buffer: &JsValue,
byte_offset: u32,
length: u32
) -> Uint8Array
它需要一个buffer
引用当前 wasm 实例的内存缓冲区的参数。
如何从 Rust 端访问这样的对象?(被编译成 wasm)
查看函数签名js_sys::Uint8Array::new_with_byte_offset_and_length
pub fn new_with_byte_offset_and_length(
buffer: &JsValue,
byte_offset: u32,
length: u32
) -> Uint8Array
它需要一个buffer
引用当前 wasm 实例的内存缓冲区的参数。
如何从 Rust 端访问这样的对象?(被编译成 wasm)
它需要一个引用当前 wasm 实例的内存缓冲区的参数缓冲区。
首先,值得注意的是,这不一定是真的。该绑定适用于标准 JavaScript API——Uint8Array
它允许您从任意缓冲区或容量创建字节数组。
如果您只想将字节数组视图传递给 Rust 内存或将 Rust 内存中的字节返回给 JavaScript,那么您实际上并不需要此构造函数 - 为此,请使用wasm-bindgen
's 标准功能并传递/返回&[u8]
或Vec<u8>
像常规那样锈代码。
但是,为了以防万一,回答您问题的第二部分
如何从 Rust 端访问这样的对象?(编译为 wasm)
从 Rust 方面,您可以使用wasm_bindgen::memory
,这将为您提供一个内存实例。默认情况下,它以 generic 的形式返回它JsValue
,但您可以将其转换为WebAssembly.Memory
using .unchecked_into::<js_sys::WebAssembly::Memory>()
,这反过来又可以让您在buffer
需要时访问该属性。
请注意,像这样为 Rust 内存创建短期Uint8Array
视图也是在内置 API 中实现的js_sys::Uint8Array::view
,但它被标记unsafe
有一个很好的理由:buffer
可以在任何分配上失效,许多内置 API 调用,所以你需要非常小心地处理这些视图,并确保它们在创建后立即使用。再次,避免问题的最佳方法是完全不依赖这种低级访问,而是使用#[wasm_bindgen]
来生成任何绑定。