这里有新鲜出炉的 Node.js 主要方法使用说明,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
这篇文章主要介绍了 Node.js 实用代码段之正确拼接 Buffer, 通过实例代码分享如何正确拼接 Buffer,感兴趣的小伙伴们可以参考一下
对于初学 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。
Buffer 对象拼接功能
注意:Buffer.concat(list, [totalLength]) 方法的第 2 个参数 totalLength 比较特别,这里的 totalLength 不是数组长度是数组里 Buffer 实例的大小总和。
来源: http://www.phperz.com/article/17/0426/266660.html