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触发onchange事件的方法说明
Mar 08 Javascript
Javascript单例模式的介绍和实例
Oct 08 Javascript
JS实现标签页切换效果
May 04 Javascript
webpack踩坑之路图片的路径与打包
Sep 05 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
Oct 13 Javascript
详解vue-cli 本地开发mock数据使用方法
May 29 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
express express-session的使用小结
Dec 12 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
May 19 jQuery
vue created钩子函数与mounted钩子函数的用法区别
Nov 05 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输出Excel文件类
2010/02/08 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
jQuery视差滚动效果网页实现方法经验总结
2016/09/29 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
Bootstrap媒体对象学习使用
2017/03/07 Javascript
Nodejs回调加超时限制两种实现方法
2017/06/09 NodeJs
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
python创建文件备份的脚本
2018/09/11 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
python中 * 的用法详解
2019/07/10 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
python无序链表删除重复项的方法
2020/01/17 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
学生会主席就职演讲稿
2014/01/14 职场文书
工作失职检讨书500字
2014/10/17 职场文书