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 相关文章推荐
window.dialogArguments 使用说明
Apr 11 Javascript
jquery监听div内容的变化具体实现思路
Nov 04 Javascript
js获得当前时区夏令时发生和终止的时间代码
Feb 23 Javascript
Jquery响应回车键直接提交表单操作代码
Jul 25 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
Mar 08 Javascript
JavaScript ES6中的简写语法总结与使用技巧
Dec 30 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
一次让你了解全部JavaScript的作用域
Jun 24 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
使用 MySQL Date/Time 类型
2008/03/26 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
CSS常用网站布局实例
2008/04/03 Javascript
js post提交调用方法
2014/02/12 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
three.js加载obj模型的实例代码
2017/11/10 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Python中subprocess模块用法实例详解
2015/05/20 Python
python发送HTTP请求的方法小结
2015/07/08 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
python之PyMongo使用总结
2017/05/26 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python操作redis和mongoDB的方法
2019/12/19 Python
python turtle工具绘制四叶草的实例分享
2020/02/14 Python
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
厂长岗位职责
2014/02/19 职场文书
应聘英语教师求职信
2014/04/24 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
德能勤绩工作总结
2015/08/11 职场文书
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers