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 相关文章推荐
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
Sep 12 Javascript
基于jQuery的实现简单的分页控件
Oct 10 Javascript
可自定义速度的js图片无缝滚动示例分享
Jan 20 Javascript
JavaScript实现的伸展收缩型菜单代码
Oct 14 Javascript
jQuery绑定事件on()与弹窗的简要概述
Apr 27 Javascript
JavaScript获取中英文混合字符串长度的方法示例
Feb 04 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
JavaScript实现图片无缝滚动效果
Jul 07 Javascript
详解tween.js 中文使用指南
Jan 05 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
js实现鼠标点击页面弹出自定义文字效果
Dec 24 Javascript
ant-design-vue 快速避坑指南(推荐)
Jan 21 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
js活用事件触发对象动作
2008/08/10 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
2019/05/21 Javascript
Python实现类继承实例
2014/07/04 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
详解python算法之冒泡排序
2019/03/05 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
HTML5中语义化 b 和 i 标签
2008/10/17 HTML / CSS
美的官方商城:Midea
2016/09/14 全球购物
Ajax的优点和缺点
2014/11/21 面试题
六查六看剖析材料
2014/10/06 职场文书
初中运动会前导词
2015/07/20 职场文书
幼儿园小班班务总结
2015/08/03 职场文书
python全面解析接口返回数据
2022/02/12 Python