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 相关文章推荐
二级域名转向类
Nov 09 Javascript
心扬JS分页函数代码
Sep 10 Javascript
jquery中ajax学习笔记3
Oct 16 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
Sep 26 Javascript
详解js界面跳转与值传递
Nov 22 Javascript
BootStrap轮播HTML代码(推荐)
Dec 10 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 Javascript
使用Vue-Router 2实现路由功能实例详解
Nov 14 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
Aug 22 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中调用C/C++制作的动态链接库的教程
2016/03/10 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
动手学习无线电
2021/03/10 无线电
用正则获取指定路径文件的名称
2007/02/27 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
javascript动态设置样式style实例分析
2015/05/13 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
Node.js+jade+mongodb+mongoose实现爬虫分离入库与生成静态文件的方法
2017/09/20 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
python脚本和网页有何区别
2020/07/02 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
自荐信不宜过于夸大
2013/11/06 职场文书
初中教师业务学习材料
2014/05/12 职场文书
消防志愿者活动方案
2014/08/23 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
营业用房租赁协议书
2014/11/26 职场文书
优秀党员推荐材料
2014/12/18 职场文书
倡议书作文
2015/01/19 职场文书
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android