Node.js實用代碼段之正確拼接Buffer
對于初學Node.js框架的開發(fā)人員來說,可能認為Buffer模塊比較易學、重要性也不是那么突出。其實,Buffer模塊在文件I/O和網(wǎng)絡I/O中應用非常廣泛,其處理二進制的性能比普通字符串性能要高出很多,重要性可謂是舉足輕重。下面我們通過一個例程向讀者演示一下,使用buf.concat()方法進行拼接的過程。
本例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 對象拼接 */ 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 對象拼接 * @type {string} */ var s2 = list.join(""); console.timeEnd("string concat test!"); /** * end record time */ console.info(); console.info("------ Buffer concat vs String concat ------");
【代碼分析】
第10行代碼定義了一個Buffer對象,變量名為buf,并初始化了一個字符串數(shù)據(jù)("thisis Buffer concat test!");第11行代碼定義了一個字符串變量str,并初始化了一個字符串數(shù)據(jù)("thisis String concat test!");從第15行代碼開始到第26行代碼結束,通過console.time()和console.timeEnd()方法完成一段時間間隔記錄;第16~21行代碼定義了一個數(shù)組變量list[],并使用buf變量對該數(shù)組變量進行初始化;第25行代碼通過Buffer.concat(list,len)方法將list[]數(shù)組中的編碼重新拼接成一個Buffer對象,關于Buffer.concat(list,len)方法的語法說明如下:
語法:Buffer.concat(list,[totalLength])
參數(shù)說明:
list{Array}:數(shù)組類型,Buffer數(shù)組,用于被連接
totalLength:{Number}類型,第一個參數(shù)Buffer數(shù)組對象的總大小
該方法返回一個保存著將傳入buffer數(shù)組中所有buffer對象拼接在一起的buffer對象;如果傳入的數(shù)組沒有內容,或者totalLength參數(shù)是0,那將返回一個zero-length的buffer;如果數(shù)組中只有一項,那么這第一項就會被返回;如果數(shù)組中的項多于一個,那么一個新的Buffer對象實例將被創(chuàng)建;如果totalLength參數(shù)沒有提供,雖然會從buffer數(shù)組中計算讀取,但是會增加一個額外的循環(huán)來計算該長度,因此提供一個明確的totalLength參數(shù)將會使得Buffer.concat()方法執(zhí)行的更快;
從圖中顯示的結果可以看到,使用Buffer.concat(list,len)方法進行拼接的耗時為48ms。
Buffer對象拼接功能
注意:Buffer.concat(list, [totalLength])方法的第2個參數(shù)totalLength比較特別,這里的totalLength不是數(shù)組長度是數(shù)組里Buffer實例的大小總和。
以上就是第二個實用的Node.js代碼段,希望對大家的學習有所幫助。
- 使用node.js中的Buffer類處理二進制數(shù)據(jù)的方法
- Node.js中使用Buffer編碼、解碼二進制數(shù)據(jù)詳解
- Node.js Windows Binary二進制文件安裝方法
- node.js中Buffer緩沖器的原理與使用方法分析
- Node.js Buffer模塊功能及常用方法實例分析
- 詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)
- Node.js Buffer用法解讀
- 關于Node.js中Buffer的一些你可能不知道的用法
- 淺談Node.js:Buffer模塊
- Node.js實用代碼段之獲取Buffer對象字節(jié)長度
- node.js中的buffer.copy方法使用說明
- node.js中的buffer.fill方法使用說明
- node.js中的buffer.length方法使用說明
- node.js中的buffer.toJSON方法使用說明
- node.js中的buffer.toString方法使用說明
- node.js中的buffer.Buffer.isEncoding方法使用說明
- node.js中的buffer.Buffer.isBuffer方法使用說明
- node.js中的buffer.Buffer.byteLength方法使用說明
- node.js中的buffer.slice方法使用說明
- node.JS二進制操作模塊buffer對象使用方法詳解
相關文章
nodejs 圖解express+supervisor+ejs的用法(推薦)
下面小編就為大家?guī)硪黄猲odejs 圖解express+supervisor+ejs的用法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09node.js express安裝及示例網(wǎng)站搭建方法(分享)
下面小編就為大家?guī)硪黄猲ode.js express安裝及示例網(wǎng)站搭建方法(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08Node.js中使用計時器定時執(zhí)行函數(shù)詳解
這篇文章主要介紹了Node.js中使用計時器定時執(zhí)行函數(shù)詳解,本文使用了Node.js中的setTimeout和setInterval函數(shù),需要的朋友可以參考下2014-08-08