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 date格式化示例
Sep 25 Javascript
JavaScript遍历table表格中的某行某列并打印其值
Jul 08 Javascript
jquery实现在光标位置插入内容的方法
Feb 05 Javascript
jQuery zTree加载树形菜单功能
Feb 25 Javascript
js添加绑定事件的方法
May 15 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
Vue之Watcher源码解析(2)
Jul 19 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
elementUI select组件默认选中效果实现的方法
Mar 25 Javascript
p5.js实现简单货车运动动画
Oct 23 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
德生1994机评
2021/03/02 无线电
PHP 文件系统详解
2012/09/13 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
vue内置指令详解
2018/04/03 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
用Python写的图片蜘蛛人代码
2012/08/27 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
Python3列表List入门知识附实例
2020/02/09 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
实体的生命周期
2013/08/31 面试题
创先争优活动方案
2014/02/12 职场文书
学习雷锋活动总结
2014/04/29 职场文书
产品设计开发计划书
2014/05/07 职场文书
房屋产权证明书
2014/10/15 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android