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 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
JavaScript中for-in遍历方式示例介绍
Feb 11 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
Apr 06 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
Aug 26 Javascript
jquery选择器简述
Aug 31 Javascript
js+css绘制颜色动态变化的圈中圈效果
Jan 27 Javascript
Angular ng-class详解及实例代码
Sep 19 Javascript
JS中将多个逗号替换为一个逗号的实现代码
Jun 23 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
Jul 15 Javascript
微信小程序wxs实现吸顶效果
Jan 08 Javascript
基于JQuery和DWR实现异步数据传递
Oct 16 jQuery
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
APMServ使用说明
2006/10/23 PHP
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
javascript[js]获取url参数的代码
2007/10/17 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
vue写h5页面的方法总结
2019/02/12 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
python pandas修改列属性的方法详解
2018/06/09 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
2014年社区国庆节活动方案
2014/09/16 职场文书
2014年实习期工作总结
2014/11/27 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
学校通报表扬范文
2015/05/04 职场文书
党小组评议意见
2015/06/02 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫