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 相关文章推荐
脚本之家贴图转换+转贴工具用到的js代码超级推荐
Apr 05 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
jQuery验证插件validation使用指南
Apr 21 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
Jul 27 Javascript
jQuery实现自定义右键菜单的树状菜单效果
Sep 02 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
Jan 15 Javascript
Angular实现form自动布局
Jan 28 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
小程序实现左滑删除功能
Oct 30 Javascript
vue 实现滚动到底部翻页效果(pc端)
Jul 31 Javascript
详解Vue之事件处理
Jul 10 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 pack与unpack 摸板字符字符含义
2009/10/29 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
curl和libcurl的区别简介
2015/07/01 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
网站上面有这种切换效果
2006/06/26 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
深入理解JavaScript系列(33):设计模式之策略模式详解
2015/03/03 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
Python中itertools模块用法详解
2014/09/25 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python3获取两个日期之间所有日期,以及比较大小的实例
2018/04/08 Python
python解决字符串倒序输出的问题
2018/06/25 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
如何提高python 中for循环的效率
2020/04/15 Python
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
经贸日语专业个人求职信
2013/12/13 职场文书
财产公证书样本
2014/04/04 职场文书
项目建议书范文
2014/05/12 职场文书
活动总结新闻稿
2014/08/30 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
工作态度不好检讨书
2015/05/06 职场文书
Python进行区间取值案例讲解
2021/08/02 Python