Node.js實用程式碼片段之正確拼接Buffer,node.jsbuffer
對於初學Node.js架構的開發人員來說,可能認為Buffer模組比較易學、重要性也不是那麼突出。其實,Buffer模組在檔案I/O和網路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,並初始化了一個字串資料("thisis Buffer concat test!");第11行代碼定義了一個字串變數str,並初始化了一個字串資料("thisis String concat test!");從第15行代碼開始到第26行代碼結束,通過console.time()和console.timeEnd()方法完成一段時間間隔記錄;第16~21行代碼定義了一個陣列變數list[],並使用buf變數對該陣列變數進行初始化;第25行代碼通過Buffer.concat(list,len)方法將list[]數組中的編碼重新拼接成一個Buffer對象,關於Buffer.concat(list,len)方法的文法說明如下:
文法:Buffer.concat(list,[totalLength])
參數說明:
list{Array}:數群組類型,Buffer數組,用於被串連
totalLength:{Number}類型,第一個參數Buffer數組對象的總大小
該方法返回一個儲存著將傳入buffer數組中所有buffer對象拼接在一起的buffer對象;如果傳入的數組沒有內容,或者totalLength參數是0,那將返回一個zero-length的buffer;如果數組中只有一項,那麼這第一項就會被返回;如果數組中的項多於一個,那麼一個新的Buffer對象執行個體將被建立;如果totalLength參數沒有提供,雖然會從buffer數組中計算讀取,但是會增加一個額外的迴圈來計算該長度,因此提供一個明確的totalLength參數將會使得Buffer.concat()方法執行的更快;
顯示的結果可以看到,使用Buffer.concat(list,len)方法進行拼接的耗時為48ms。
Buffer對象拼接功能
注意:Buffer.concat(list, [totalLength])方法的第2個參數totalLength比較特別,這裡的totalLength不是數組長度是數組裡Buffer執行個體的大小總和。
以上就是第二個實用的Node.js程式碼片段,希望對大家的學習有所協助。
您可能感興趣的文章:
- node.js 一個簡單的頁面輸出實現代碼
- node.jsRegex擷取網頁中所有連結的代碼執行個體
- node.js實現逐行讀取檔案內容的代碼
- 我的Node.js學習之路(三)--node.js作用、回調、同步和非同步代碼 以及事件迴圈
- Node.js中使用Buffer編碼、解碼位元據詳解
- node.js中的buffer.write方法使用說明
- node.js中的buffer.toString方法使用說明
- node.js中的buffer.toJSON方法使用說明
- node.js中的buffer.copy方法使用說明