Javascript在客戶端對于unicode編碼的數(shù)據(jù)操作支持非常友好,但是對二進制數(shù)據(jù)的處理就不盡人意。Node.js為了能夠處理二進制數(shù)據(jù)或非unicode編碼的數(shù)據(jù),便設(shè)計了Buffer類,該類實現(xiàn)了Uint8Array接口,并對其進行了優(yōu)化,它的實例類似于整型數(shù)組,但是它的大小在創(chuàng)建后便不可調(diào)整。在介紹Buffer如何使用之前,先介紹幾個知識點。

1、V8引擎的內(nèi)存使用限制

V8引擎最大堆內(nèi)存使用在32位系統(tǒng)上默認為512M,在64位系統(tǒng)上是1GB,雖然可以使用--max-old-space-size參數(shù)調(diào)整該值,但還是建議要用到大內(nèi)存的時候使用Buffer或Stream,因為Buffer的內(nèi)存分配不在V8的堆上。

2、單個Buffer實例大小限制

單個Buffer實例的大小最大數(shù)值為1GB-1(32位系統(tǒng))或2GB-1(64位系統(tǒng)),所以在創(chuàng)建Buffer實例的時候不能超過該值,或者使用readFile()方法讀取大文件,否則將拋出RangeError錯誤。

3、8KB池

Nodejs在創(chuàng)建Buffer實例的時候,當(dāng)用戶申請的空間大于8KB,會直接調(diào)用內(nèi)部的createUnsafeBuffer()方法創(chuàng)建一個Buffer,如果申請的空間大于0且小于4KB,新的Buffer則會建立在當(dāng)前的8kb SLAB上,并更新剩余空間,如下圖所示:
seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

下面介紹Buffer API的簡單使用:
1、創(chuàng)建Buffer實例
使用Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe()等方法來創(chuàng)建一個Buffer實例,6.0版本以前直接使用構(gòu)造函數(shù)創(chuàng)建的方法

網(wǎng)友評論