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实例教程(19) 使用HoTMetal(1)
Dec 23 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
H5上传本地图片并预览功能
May 08 Javascript
移动设备手势事件库Touch.js使用详解
Aug 18 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
Node.js 中使用 async 函数的方法
Nov 20 Javascript
微信小程序的部署方法步骤
Sep 04 Javascript
微信小程序定义和调用全局变量globalData的实现
Nov 01 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过滤表单提交的html等危险代码
2014/11/03 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
php将远程图片保存到本地服务器的实现代码
2015/08/03 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
JAVASCRIPT style 中visibility和display之间的区别
2010/01/22 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
React组件生命周期详解
2017/07/03 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
python中的字典操作及字典函数
2018/01/03 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
Python configparser模块常用方法解析
2020/05/22 Python
python温度转换华氏温度实现代码
2020/12/06 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
STP的判定过程
2012/10/01 面试题
商场开业庆典策划方案
2014/06/02 职场文书
市场营销工作计划书
2014/09/15 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
工程部主管岗位职责
2015/02/12 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript