Node.js實(shí)用代碼段之正確拼接Buffer
對(duì)于初學(xué)Node.js框架的開(kāi)發(fā)人員來(lái)說(shuō),可能認(rèn)為Buffer模塊比較易學(xué)、重要性也不是那么突出。其實(shí),Buffer模塊在文件I/O和網(wǎng)絡(luò)I/O中應(yīng)用非常廣泛,其處理二進(jìn)制的性能比普通字符串性能要高出很多,重要性可謂是舉足輕重。下面我們通過(guò)一個(gè)例程向讀者演示一下,使用buf.concat()方法進(jìn)行拼接的過(guò)程。
本例ch04.buffer-concat.js主要代碼如下:
/**
* ch04.buffer-concat.js
*/
console.info("------ Buffer concat vs String concat ------");
console.info();
/**
* define variable
* @type {Buffer}
*/
var buf = new Buffer("this is Buffer concat test!");
var str = "this is String concat test!";
/**
* start record time
*/
console.time("buffer concat test!");
var list = [];
var len = 100000 * buf.length;
for(var i=0; i<100000; i++){
list.push(buf);
len += buf.length;
}
/**
* Buffer 對(duì)象拼接
*/
var s1 = Buffer.concat(list, len).toString();
console.timeEnd("buffer concat test!");
console.info();
console.time("string concat test!");
var list = [];
for(var i=100000; i>=0; i--) {
list.push(str);
}
/**
* String 對(duì)象拼接
* @type {string}
*/
var s2 = list.join("");
console.timeEnd("string concat test!");
/**
* end record time
*/
console.info();
console.info("------ Buffer concat vs String concat ------");
【代碼分析】
第10行代碼定義了一個(gè)Buffer對(duì)象,變量名為buf,并初始化了一個(gè)字符串?dāng)?shù)據(jù)("thisis Buffer concat test!");第11行代碼定義了一個(gè)字符串變量str,并初始化了一個(gè)字符串?dāng)?shù)據(jù)("thisis String concat test!");從第15行代碼開(kāi)始到第26行代碼結(jié)束,通過(guò)console.time()和console.timeEnd()方法完成一段時(shí)間間隔記錄;第16~21行代碼定義了一個(gè)數(shù)組變量list[],并使用buf變量對(duì)該數(shù)組變量進(jìn)行初始化;第25行代碼通過(guò)Buffer.concat(list,len)方法將list[]數(shù)組中的編碼重新拼接成一個(gè)Buffer對(duì)象,關(guān)于Buffer.concat(list,len)方法的語(yǔ)法說(shuō)明如下:
語(yǔ)法:Buffer.concat(list,[totalLength])
參數(shù)說(shuō)明:
list{Array}:數(shù)組類型,Buffer數(shù)組,用于被連接
totalLength:{Number}類型,第一個(gè)參數(shù)Buffer數(shù)組對(duì)象的總大小
該方法返回一個(gè)保存著將傳入buffer數(shù)組中所有buffer對(duì)象拼接在一起的buffer對(duì)象;如果傳入的數(shù)組沒(méi)有內(nèi)容,或者totalLength參數(shù)是0,那將返回一個(gè)zero-length的buffer;如果數(shù)組中只有一項(xiàng),那么這第一項(xiàng)就會(huì)被返回;如果數(shù)組中的項(xiàng)多于一個(gè),那么一個(gè)新的Buffer對(duì)象實(shí)例將被創(chuàng)建;如果totalLength參數(shù)沒(méi)有提供,雖然會(huì)從buffer數(shù)組中計(jì)算讀取,但是會(huì)增加一個(gè)額外的循環(huán)來(lái)計(jì)算該長(zhǎng)度,因此提供一個(gè)明確的totalLength參數(shù)將會(huì)使得Buffer.concat()方法執(zhí)行的更快;
從圖中顯示的結(jié)果可以看到,使用Buffer.concat(list,len)方法進(jìn)行拼接的耗時(shí)為48ms。

Buffer對(duì)象拼接功能
注意:Buffer.concat(list, [totalLength])方法的第2個(gè)參數(shù)totalLength比較特別,這里的totalLength不是數(shù)組長(zhǎng)度是數(shù)組里Buffer實(shí)例的大小總和。
以上就是第二個(gè)實(shí)用的Node.js代碼段,希望對(duì)大家的學(xué)習(xí)有所幫助。
- 使用node.js中的Buffer類處理二進(jìn)制數(shù)據(jù)的方法
- Node.js中使用Buffer編碼、解碼二進(jìn)制數(shù)據(jù)詳解
- Node.js Windows Binary二進(jìn)制文件安裝方法
- node.js中Buffer緩沖器的原理與使用方法分析
- Node.js Buffer模塊功能及常用方法實(shí)例分析
- 詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)
- Node.js Buffer用法解讀
- 關(guān)于Node.js中Buffer的一些你可能不知道的用法
- 淺談Node.js:Buffer模塊
- Node.js實(shí)用代碼段之獲取Buffer對(duì)象字節(jié)長(zhǎng)度
- node.js中的buffer.copy方法使用說(shuō)明
- node.js中的buffer.fill方法使用說(shuō)明
- node.js中的buffer.length方法使用說(shuō)明
- node.js中的buffer.toJSON方法使用說(shuō)明
- node.js中的buffer.toString方法使用說(shuō)明
- node.js中的buffer.Buffer.isEncoding方法使用說(shuō)明
- node.js中的buffer.Buffer.isBuffer方法使用說(shuō)明
- node.js中的buffer.Buffer.byteLength方法使用說(shuō)明
- node.js中的buffer.slice方法使用說(shuō)明
- node.JS二進(jìn)制操作模塊buffer對(duì)象使用方法詳解
相關(guān)文章
node管理統(tǒng)計(jì)文件大小并顯示目錄磁盤(pán)空間狀態(tài)從零實(shí)現(xiàn)
這篇文章主要為大家介紹了node管理統(tǒng)計(jì)文件大小并顯示目錄磁盤(pán)空間狀態(tài)的從零實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
node.js實(shí)現(xiàn)簡(jiǎn)單登錄注冊(cè)功能
這篇文章主要為大家詳細(xì)介紹了node.js實(shí)現(xiàn)簡(jiǎn)單登錄注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
使用NestJS開(kāi)發(fā)Node.js應(yīng)用的方法
這篇文章主要介紹了使用NestJS開(kāi)發(fā)Node.js應(yīng)用的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
node基于express框架操作Mysql數(shù)據(jù)庫(kù)的步驟
這篇文章主要介紹了node基于express框架操作Mysql數(shù)據(jù)庫(kù)的步驟,文章給大家提到安裝mysql模塊和配置mysql模塊的步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
前端如何更好的展示后端返回的十萬(wàn)條數(shù)據(jù)
這篇文章主要為大家介紹了前端如何更好的展示后端返回的十萬(wàn)條數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11

