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 for循环设法提高性能
Feb 24 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
JS实现的论坛Ajax打分效果完整实例
Oct 31 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
Dec 06 Javascript
ECMAScript6快速入手攻略
Jul 18 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
Nov 07 Javascript
基于wordpress的ajax写法详解
Jan 02 Javascript
详解vuex之store源码简单解析
Jun 13 Javascript
layui多iframe页面控制定时器运行的方法
Sep 05 Javascript
vue 对axios get pust put delete封装的实例代码
Jan 05 Javascript
正则表达式基础与常用验证表达式
Jun 16 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/06/09 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
php导入模块文件分享
2015/03/17 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
使用js+jquery实现无限极联动
2013/05/23 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
Python实现随机爬山算法
2021/01/29 Python
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
Etam德国:内衣精品店
2019/08/25 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
心理学专业毕业生推荐信范文
2013/11/21 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
学生检讨书怎么写
2014/10/09 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python