鍍金池/ 問答/HTML/ 為什么說Buffer 對象的內(nèi)存是被解析為一個明確元素的數(shù)組,而不是一個目標(biāo)類型

為什么說Buffer 對象的內(nèi)存是被解析為一個明確元素的數(shù)組,而不是一個目標(biāo)類型的字節(jié)數(shù)組?

在看Node buffer文檔的時候,對一個概念不是很理解。什么是明確元素的數(shù)組,什么是目標(biāo)類型的字節(jié)數(shù)組?

Buffer 對象的內(nèi)存是被解析為一個明確元素的數(shù)組,而不是一個目標(biāo)類型的字節(jié)數(shù)組。 也就是說,new Uint32Array(Buffer.from([1, 2, 3, 4])) 會創(chuàng)建一個包含 [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].

回答
編輯回答
兔寶寶

明確元素的數(shù)組,是指數(shù)組中的元素個數(shù)、元素的值,以及元素的類型都是明確的。例如:[1,2,3,4],數(shù)組的元素個數(shù)是 4 個,元素的值,分別是 1, 2, 3, 4,元素的類型是 32 位的整型數(shù)據(jù)。

目標(biāo)類型的字節(jié)數(shù)組,例如:0x10203040 or 0x40302010,目標(biāo)類型是 32 位整數(shù)類型,所謂,字節(jié)數(shù)組,對于 32 位整型,就是四個字節(jié)的數(shù)組。但是,元素的個數(shù)就是一個了,元素的值也是一個,要么是 0x10203040,要么是 0x40302010,元素的類型當(dāng)然是整數(shù)類型。

這兩個可是截然相反的東西。

總之,API 文檔想表達(dá)的意思是 Buffer 的內(nèi)存是按照原數(shù)據(jù)的類型存放的。原數(shù)據(jù)是整型,那么一個數(shù)就是 32 位(對于字長 32 位的電腦來說),原數(shù)據(jù)是 ASCII 的字符串,一個字符就是一個字節(jié),如果原數(shù)據(jù)是 utf-8 編碼的字符串,一個字符就是三個字節(jié)。

2017年6月29日 06:56