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

cke_1130.png

cke_1677.png

cke_2255.png


更多关于HarmonyOS鸿蒙Next中请教大佬,arrayBuffer和arrayBuffer2为啥不一样的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,arrayBufferarrayBuffer2的差异通常源于内存分配方式或数据初始化状态。arrayBuffer可能指向系统预分配的内存区域,而arrayBuffer2可能是动态创建或通过不同API生成的实例,导致二者在内存地址或内部属性上不同。具体行为需查看实际代码中两者的创建方法和使用场景。

更多关于HarmonyOS鸿蒙Next中请教大佬,arrayBuffer和arrayBuffer2为啥不一样的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在您的代码中,arrayBufferarrayBuffer2 不一样是因为它们来自不同的数据源和构造方式:

  1. arrayBuffer 是通过 Uint8Array(bytes).buffer 创建的,其中 bytes 是手动从 uint(即 TextEncoder.encodeInto 返回的 Uint8Array)中提取的数值数组。这创建了一个新的 ArrayBuffer,内容与原始 uint 相同,但指向不同的内存区域。

  2. arrayBuffer2 直接来自 uint.buffer,即 TextEncoder.encodeInto 返回的 Uint8Array 的原始 ArrayBuffer。它直接引用编码结果的内存,没有中间转换。

差异原因:

  • arrayBuffer 是间接构造的副本,通过 bytes 数组转换而来,可能因数据类型处理引入细微差异。
  • arrayBuffer2 是原始缓冲区的直接引用,确保与编码结果完全一致。

在调试时显示的长度或内容差异,通常是因为:

  • 手动 bytes 数组处理时可能包含额外数据或索引错误。
  • 直接使用 uint.buffer 更高效且准确。

建议直接使用 arrayBuffer2 以避免不必要的转换,确保数据完整性。

回到顶部