在看Node buffer文档的时候,对一个概念不是很理解。什么是明确元素的数组,什么是目标类型的字节数组?
Buffer 对象的内存是被解析为一个明确元素的数组,而不是一个目标类型的字节数组。 也就是说,new Uint32Array(Buffer.from([1, 2, 3, 4])) 会创建一个包含 [1, 2, 3, 4] 四个元素的 Uint32Array,而不是一个只包含一个元素 [0x1020304] 或 [0x4030201] 的 Uint32Array 。
英文原文:
The Buffer object's memory is interpreted as an array of distinct elements, and not as a byte array of the target type. That is, new Uint32Array(Buffer.from([1, 2, 3, 4])) creates a 4-element Uint32Array with elements [1, 2, 3, 4], not a Uint32Array with a single element [0x1020304] or [0x4030201].
明确元素的数组,是指数组中的元素个数、元素的值,以及元素的类型都是明确的。例如:[1,2,3,4],数组的元素个数是 4 个,元素的值,分别是 1, 2, 3, 4,元素的类型是 32 位的整型数据。
目标类型的字节数组,例如:0x10203040 or 0x40302010,目标类型是 32 位整数类型,所谓,字节数组,对于 32 位整型,就是四个字节的数组。但是,元素的个数就是一个了,元素的值也是一个,要么是 0x10203040,要么是 0x40302010,元素的类型当然是整数类型。
这两个可是截然相反的东西。
总之,API 文档想表达的意思是 Buffer 的内存是按照原数据的类型存放的。原数据是整型,那么一个数就是 32 位(对于字长 32 位的电脑来说),原数据是 ASCII 的字符串,一个字符就是一个字节,如果原数据是 utf-8 编码的字符串,一个字符就是三个字节。