Node.js中由TypeArray初始化Buffer時(shí)候的疑問
問題描述
目前工作中用到了Node.js, 于是看官方文檔來(lái)學(xué)習(xí)一下。 在Buffer文檔中, 關(guān)于使用Buffer.from, 我寫了以下的測(cè)試代碼:
> var arr = new Uint16Array(2)undefined> arr[0] = 50005000> arr[1] = 40004000> var buf1 = Buffer.from(arr)undefined> var buf2 = Buffer.from(arr.buffer)undefined> buf1<Buffer 88 a0>> buf2<Buffer 88 13 a0 0f>> arr[1] = 60006000> buf1<Buffer 88 a0>> buf2<Buffer 88 13 70 17>
問題如下:
使用arr和arr.buffer進(jìn)行初始化, 區(qū)別是什么? 這個(gè)問題引申出以下問題:
為什么arr的修改會(huì)影響buf2而不影響buf1.
對(duì)于buf2來(lái)說(shuō), 1388 == 5000, 但buf1卻只顯示88?
問題解答
回答1:1.arr和arr.buffer的初始化問題,使用arr的時(shí)候,會(huì)新建一個(gè)新的存儲(chǔ)空間. 而使用arr.buffer的時(shí)候,只是引用了擁有.buffer屬性的arr實(shí)例,新創(chuàng)建的存儲(chǔ)空間和arr指向的存儲(chǔ)空間是一個(gè)2.理解了第1題,第2題就很簡(jiǎn)單了,buf1指向了一個(gè)新的存儲(chǔ)空間,buf2指向了與arr一樣的存儲(chǔ)空間3.這個(gè)不清楚,只能說(shuō)現(xiàn)象了,buf1輸出了申請(qǐng)空間的首字節(jié)的數(shù)據(jù),buf2輸出了申請(qǐng)空間的所有字節(jié)的數(shù)據(jù).我這里使用了Uint32Array()的結(jié)果可以說(shuō)明。
不知題主是否明白了問題3,可否告知,謝謝
相關(guān)文章:
1. javascript - vue 移動(dòng)端的input 數(shù)字輸入優(yōu)化2. java - mongodb分片集群下,count和聚合統(tǒng)計(jì)問題3. java - 自己制作一個(gè)視頻播放器,遇到問題,用的是內(nèi)置surfaceview類,具體看代碼!4. android - java 泛型不支持?jǐn)?shù)組,那么RxJava的Map集合有什么方便的手段可以定義獲得一串共同父類集合數(shù)據(jù)呢?5. 服務(wù)器端 - 采用nginx做web服務(wù)器,C++開發(fā)應(yīng)用程序 出現(xiàn)拒絕連接請(qǐng)求?6. 為什么我ping不通我的docker容器呢???7. 關(guān)于docker下的nginx壓力測(cè)試8. python - pandas按照列A和列B分組,將列C求平均數(shù),怎樣才能生成一個(gè)列A,B,C的dataframe9. javascript - 有什么兼容性比較好的辦法來(lái)判斷瀏覽器窗口的類型?10. java - 靜態(tài)屬性中的賦值和靜態(tài)代碼塊中的賦值有什么區(qū)別?
