Node.js实用代码段之正确拼接Buffer


Posted in Javascript onMarch 17, 2016

对于初学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。

Node.js实用代码段之正确拼接Buffer

Buffer对象拼接功能

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

以上就是第二个实用的Node.js代码段,希望对大家的学习有所帮助。

Javascript 相关文章推荐
网页自动跳转代码收集
Sep 27 Javascript
重载toString实现JS HashMap分析
Mar 13 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
Oct 14 Javascript
使用mouse事件实现简单的鼠标经过特效
Jan 30 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
Node.js 异步异常的处理与domain模块解析
May 10 Javascript
js自定义瀑布流布局插件
May 16 Javascript
详解vue+webpack+express中间件接口使用
Jul 17 Javascript
详解如何在微信小程序中愉快地使用sass
Jul 30 Javascript
Vue异步组件处理路由组件加载状态的解决方案
Sep 07 Javascript
vue-cli 3.x 修改dist路径的方法
Sep 19 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 #Javascript
jquery基础知识第一讲之认识jquery
Mar 17 #Javascript
Angularjs 滚动加载更多数据
Mar 17 #Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 #Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 #Javascript
基于jquery实现简单的分页控件
Mar 17 #Javascript
jQuery实现图片局部放大镜效果
Mar 17 #Javascript
You might like
基于PHP 面向对象之成员方法详解
2013/05/04 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
jquery遍历input取得input的name
2009/04/27 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
Python3.x中自定义比较函数
2015/04/24 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
python实现证件照换底功能
2019/08/20 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
女方回门宴答谢词
2014/01/14 职场文书
地震捐款倡议书
2014/08/29 职场文书
自我推荐信怎么写
2015/03/24 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers