zoukankan      html  css  js  c++  java
  • 《超实用的Node.js代码段》连载二:正确拼接Buffer

       对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学、重要性也不是那么突出。其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出很多,重要性可谓是举足轻重。下面我们通过一个例程向读者演示一下,使用buf.concat()方法进行拼接的过程。

       本例ch04.buffer-concat.js主要代码如下:

     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。

    图4.10  Buffer对象拼接功能

    注意:Buffer.concat(list, [totalLength])方法的第2个参数totalLength比较特别,这里的totalLength不是数组长度是数组里Buffer实例的大小总和。


  • 相关阅读:
    分享一组很赞的 jQuery 特效【附源码下载】
    HTML5 Canvas 实现的9个 Loading 效果
    Charted – 自动化的可视化数据生成工具
    jQuery Countdown Timer 倒计时效果
    Droidicon – 1600+ 漂亮的 Android 图标
    tiltShift.js
    推荐12个最好的 JavaScript 图形绘制库
    Elastic Image Slider 带缩略图功能的幻灯片
    12款高质量的响应式 HTML5/CSS3 网站模板
    7种鼠标悬停效果,多样的图片说明展示
  • 原文地址:https://www.cnblogs.com/book2006/p/5286596.html
Copyright © 2011-2022 走看看