emitter.emit 中传递 arraybuffer 失败 HarmonyOS 鸿蒙Next
emitter.emit 中传递 arraybuffer 失败 HarmonyOS 鸿蒙Next
let eventData: emitter.EventData = {
data: {
buffer,
// width,
// height,
}
};
console.log("eventData type:", eventData instanceof Object);
emitter.emit("getFrameInfo", eventData);
传递buffer在emitter.on里面收到就是{},如果不传递buffer,就能拿到width height,请问这是为什么呢
更多关于emitter.emit 中传递 arraybuffer 失败 HarmonyOS 鸿蒙Next的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
你好,ArrayBuffer类型的数据需要转换为Base64编码后再进行传输。
更多关于emitter.emit 中传递 arraybuffer 失败 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,emitter.emit
用于在事件总线中传递数据。如果你在传递ArrayBuffer
时遇到失败,可能是因为鸿蒙的事件总线机制对数据类型有特定的限制。emitter.emit
通常支持传递基本数据类型(如字符串、数字、布尔值)以及简单的对象,但对于二进制数据(如ArrayBuffer
),可能需要额外的处理。
你可以考虑将ArrayBuffer
转换为Base64编码的字符串后再传递。例如:
const buffer = new ArrayBuffer(10);
const base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(buffer)));
emitter.emit('eventName', base64String);
在接收端,再将Base64字符串解码回ArrayBuffer
:
const base64String = event.data;
const binaryString = atob(base64String);
const buffer = new ArrayBuffer(binaryString.length);
const uint8Array = new Uint8Array(buffer);
for (let i = 0; i < binaryString.length; i++) {
uint8Array[i] = binaryString.charCodeAt(i);
}
这种方式可以绕过事件总线对二进制数据的限制。