HarmonyOS鸿蒙Next中请教大佬,arrayBuffer和arrayBuffer2为啥不一样
HarmonyOS鸿蒙Next中请教大佬,arrayBuffer和arrayBuffer2为啥不一样
let str = "! 0 200 200 210 1\\nTEXT 4 0 200 100 TEXT\\nFORM\\nPRINT";
let textEncoder = new util.TextEncoder("GBK");
let uint = textEncoder.encodeInto(str);
let bytes:Array<number> = [];
for (let index = 0; index < uint.length; index++) {
bytes.push(uint[index].valueOf());
}
let uint8array = new Uint8Array(bytes);
let arrayBuffer = uint8array.buffer
let arrayBuffer2 = uint.buffer



更多关于HarmonyOS鸿蒙Next中请教大佬,arrayBuffer和arrayBuffer2为啥不一样的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,arrayBuffer和arrayBuffer2的差异通常源于内存分配方式或数据初始化状态。arrayBuffer可能指向系统预分配的内存区域,而arrayBuffer2可能是动态创建或通过不同API生成的实例,导致二者在内存地址或内部属性上不同。具体行为需查看实际代码中两者的创建方法和使用场景。
更多关于HarmonyOS鸿蒙Next中请教大佬,arrayBuffer和arrayBuffer2为啥不一样的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在您的代码中,arrayBuffer 和 arrayBuffer2 不一样是因为它们来自不同的数据源和构造方式:
-
arrayBuffer是通过Uint8Array(bytes).buffer创建的,其中bytes是手动从uint(即TextEncoder.encodeInto返回的Uint8Array)中提取的数值数组。这创建了一个新的ArrayBuffer,内容与原始uint相同,但指向不同的内存区域。 -
arrayBuffer2直接来自uint.buffer,即TextEncoder.encodeInto返回的Uint8Array的原始ArrayBuffer。它直接引用编码结果的内存,没有中间转换。
差异原因:
arrayBuffer是间接构造的副本,通过bytes数组转换而来,可能因数据类型处理引入细微差异。arrayBuffer2是原始缓冲区的直接引用,确保与编码结果完全一致。
在调试时显示的长度或内容差异,通常是因为:
- 手动
bytes数组处理时可能包含额外数据或索引错误。 - 直接使用
uint.buffer更高效且准确。
建议直接使用 arrayBuffer2 以避免不必要的转换,确保数据完整性。

