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 &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
js中if语句的几种优化代码写法
Mar 12 Javascript
input链接页面、打开新网页等等的具体实现
Dec 30 Javascript
JavaScript函数模式详解
Nov 07 Javascript
AngularJS语法详解(续)
Jan 23 Javascript
原生javascript实现解析XML文档与字符串
Mar 01 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
vue中使用axios post上传头像/图片并实时显示到页面的方法
Sep 27 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
Oct 20 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
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
PyQt5 多窗口连接实例
2019/06/19 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
受欢迎的大学生自我评价
2013/12/05 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
大学生简历求职信
2014/06/24 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle