node緩沖區(qū)解讀

緩沖區(qū)解讀

我們主要聊聊以下幾個方面的問題:

什么是緩沖區(qū),用來做啥

如何創(chuàng)建緩沖區(qū)

訪問緩沖區(qū)

設(shè)置某個字節(jié)的數(shù)據(jù)

切分緩沖區(qū)

復(fù)制緩沖區(qū)

編碼和解碼二進制數(shù)據(jù)

好,看起來內(nèi)容有點多,其實很簡單,我們切入正題

緩沖區(qū)的概念

我們都知道JS非常的善于處理字符串,因此它并不善于處理二進制的數(shù)據(jù)。在js中沒有字節(jié)類型,也沒有結(jié)構(gòu)類型,也沒有字節(jié)數(shù)組類型,只有數(shù)值類型和字符串類型。

在服務(wù)器端,JS可以很容易處理http這樣的文本協(xié)議,但是我們知道服務(wù)端不僅做這些,可能會有數(shù)據(jù)庫通信,操作圖像,文件上傳。所以JS操作起來不是那么的容易,浪費資源,有很緩慢。因此Buffer就出現(xiàn)了,它作為node的一個核心模塊,專門來處理二進制數(shù)據(jù)。

要了解的buffer特點

Buffer偽類的數(shù)據(jù)占用并不是分配在JS的VM內(nèi)存堆中,也就是說Buffer對象不會被JS的垃圾收集算法處理,它占據(jù)的是一個不會被修改的永久內(nèi)存地址,這也避免了因緩沖區(qū)內(nèi)容的內(nèi)存復(fù)制而導(dǎo)致的CPU浪費。

創(chuàng)建緩沖區(qū)

緩沖區(qū)的創(chuàng)建方法很簡單,我們看一個例子:

//1. utf-8 constbuf =newBuffer('hello world');//默認的編碼方式//2.指定編碼方式constbuf1 =newBuffer('8b76fde713ce','base64');//3.創(chuàng)建指定長度的緩沖區(qū)constbuf2 =newBuffer(1024);//創(chuàng)建1024字節(jié)的緩沖區(qū)console.log(buf);//

訪問緩沖區(qū)和相關(guān)操作

//訪問緩沖區(qū)console.log(buf[2]);//buf 上第2個字節(jié)->108//初始化緩沖區(qū)中的數(shù)據(jù)并非0 而是一些隨機值 (書上)console.log(buf2[1]);//自己親測的時候是0 可能是我node版本的原因//設(shè)置某個字節(jié)上的數(shù)據(jù)buf2[1] =125;console.log(buf2[1]);// 125//獲取長度console.log(buf.length);// 11//軼代緩沖區(qū)內(nèi)容constbuf3 =newBuffer(100);for(vari =0;i

切分緩沖區(qū)

//切分緩沖區(qū)constbuf4 =newBuffer('nihao node js');constsmallerBuf = buf4.slice(8,12);console.log(smallerBuf.toString());//de j

需要知道的幾點:

1.沒有分配新的內(nèi)存,沒有進行任何復(fù)制

2.修改父緩沖區(qū)數(shù)據(jù)會影響到子緩沖區(qū)數(shù)據(jù)

3.其實是創(chuàng)建了子緩沖區(qū),父緩沖區(qū)操作結(jié)束后依然繼續(xù)被保留,不能被垃圾回? ? ? ? ? 收器回收,會導(dǎo)致內(nèi)存泄漏

4.可以用copy方法代替

復(fù)制緩沖區(qū)

//復(fù)制緩沖區(qū)constbuf5 =newBuffer(11);buf4.copy(buf5,0,8,19);console.log(buf5.toString());//de js

解碼和編碼

//解碼//1.解析成utf8字符串console.log(buf3.toString());//2.將uft8字符串解析成base64格式的console.log(smallerBuf.toString('base64'));//ZGUgag==

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容