nodejs: 理解Buffer
学习nodejs中buffer这一章,有一段写到buffer的拼接,其中一段源码非常优美,特拿来与大家共享。
var chunks = []; var size = 0; res.on('data', function(chunk){ chunks.push(chunk); size += chunk.length; }); res.on('end', function(){ var buf = Buffer.concat(chunks, size); var str = iconv.decode(buf, 'utf8'); console.log(str); })
正确的拼接方式是用一个数组来存储接收到的所有Buffer片段并记录下所有的中长度。Buffer.concat方法封装了从小Buffer对象到大Buffer对象的复制过程,实现十分细腻,值得学习。
Buffer.concat = function(list, length) { if(!Array.isArray(list)) { throw new Error('Usage:Buffer.concat(list, [length])'); } if(list.length === 0) { return new Buffer(0); } else if(list.length === 1) { return list[0]; } if(typeof length !== 'number') { length = 0; for(var i=0; i<list.length; i++) { var buf = list[i]; length += buf.length; } } var buffer = new Buffer(length); var pos = 0; for(var i=0; i<list.length; i++) { var buf = list[i]; buf.copy(buffer, pos); pos += buf.length; } return buffer; }
作者:cjingzm
出处:http://www.cnblogs.com/cjingzm/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。