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 相关文章推荐
在JavaScript中使用inline函数的问题
Mar 08 Javascript
javascript代码加载优化方法
Jan 30 Javascript
JS构建页面的DOM节点结构的实现代码
Dec 09 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
node.js中的fs.fstat方法使用说明
Dec 15 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
Dec 20 Javascript
js操作滚动条事件实例
Jan 29 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
Oct 22 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
Sep 19 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
DOM事件探秘篇
Feb 15 Javascript
webpack搭建vue 项目的步骤
Dec 27 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/07/05 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
php经典算法集锦
2015/11/14 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
2013/04/01 Javascript
javascript date格式化示例
2013/09/25 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
JavaScript中创建对象的模式汇总
2016/04/19 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
微信小程序checkbox组件使用详解
2018/01/31 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
2014年建筑工程工作总结
2014/12/03 职场文书
节约用水广告语60条
2019/11/14 职场文书
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记