《超實用的Node.js代碼段》連載二:正確拼接Buffer

   對於初學Node.js框架的開發人員來講,可能認爲Buffer模塊比較易學、重要性也不是那麼突出。其實,Buffer模塊在文件I/O和網絡I/O中應用很是普遍,其處理二進制的性能比普通字符串性能要高出不少,重要性可謂是舉足輕重。下面咱們經過一個例程向讀者演示一下,使用buf.concat()方法進行拼接的過程。javascript

   本例ch04.buffer-concat.js主要代碼以下:java

 1 /** 
 2  * ch04.buffer-concat.js 
 3  */  
 4 console.info("------   Buffer concat vs String concat  ------");  
 5 console.info();  
 6 /** 
 7  * define variable 
 8  * @type {Buffer} 
 9  */  
10 var buf = new Buffer("this is Buffer concat test!");  
11 var str = "this is String concat test!";  
12 /** 
13  * start record time 
14  */  
15 console.time("buffer concat test!");  
16 var list = [];  
17 var len = 100000 * buf.length;  
18 for(var i=0; i<100000; i++){  
19     list.push(buf);  
20     len += buf.length;  
21 }  
22 /** 
23  * Buffer 對象拼接 
24  */  
25 var s1 = Buffer.concat(list, len).toString();  
26 console.timeEnd("buffer concat test!");  
27 console.info();  
28 console.time("string concat test!");  
29 var list = [];  
30 for(var i=100000; i>=0; i--) {  
31     list.push(str);  
32 }  
33 /** 
34  * String 對象拼接 
35  * @type {string} 
36  */  
37 var s2 = list.join("");  
38 console.timeEnd("string concat test!");  
39 /** 
40  * end record time 
41  */  
42 console.info();  
43 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()方法執行的更快;性能

從圖4.10中顯示的結果能夠看到,使用Buffer.concat(list,len)方法進行拼接的耗時爲48ms。this

圖4.10  Buffer對象拼接功能編碼

注意:Buffer.concat(list, [totalLength])方法的第2個參數totalLength比較特別,這裏的totalLength不是數組長度是數組裏Buffer實例的大小總和。spa


相關文章
相關標籤/搜索