nodejs基础之buffer缓冲区用法分析


Posted in NodeJs onDecember 26, 2018

本文实例讲述了nodejs基础之buffer缓冲区用法。分享给大家供大家参考,具体如下:

JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。

创建buffer类

1、创建长度为指定字节的buffer实例

var buffer = new Buffer(10); //创建长度为10字节的buffer实例

2、通过数组创建buffer实例

var buffer = new Buffer([10,20,30,40,50]);

3、通过一个字符串来创建buffer实例

var buffer = new Buffer('www.google.com','utf-8');
//utf-8 是默认的编码方式,此外还可以指定以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"

缓冲区长度

语法:

buf.length;

返回值:

返回 Buffer 对象所占据的内存长度。

实例:

var buffer = new Buffer('www.runoob.com');
// 缓冲区长度
console.log("buffer length: " + buffer.length); //buffer length: 14

写入缓冲区

语法:

buffer.write(string[, offset][, length][, encoding])

参数:

  • string:写入缓冲区的字符串。
  • offset:缓冲区开始写入的索引值,默认为 0 。
  • length:写入的字节数,默认为 buffer.length
  • encoding:使用的编码。默认为 'utf8' 。

返回值:

返回实际写入的大小(number类型)。如果 buffer 空间不足, 则只会写入部分字符串。

实例:

buf = new Buffer(256);
len = buf.write("www.runoob.com");
console.log("写入字节数 : "+ len); //写入字节数 : 14

从缓冲区读取数据

语法:

buf.toString([encoding][, start][, end])

参数:

  • encoding:使用的编码,默认为utf-8
  • start:指定开始读取的索引位置,默认为0
  • end:指定读取的结束位置,默认为缓冲区的末尾

返回值:

解码缓冲区数据,并使用指定的编码返回字符串

实例:

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
 buf[i] = i + 97;
}
console.log( buf.toString('ascii'));  // 输出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)); // 输出: abcde
console.log( buf.toString('utf8',0,5)); // 输出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde

buffer对象转换成json对象

语法:

toJSON()方法

返回值:

json对象

实例:

var buf = new Buffer('www.google.com');
var json = buf.toJSON(buf);
console.log(json); //[ 119, 119, 119, 46, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109 ]

缓冲区合并

语法:

Buffer.concat(list[, totalLength])

参数:

  • list:用于合并的 Buffer 对象数组列表。
  • totalLength:指定合并后Buffer对象的总长度。

返回值:

返回一个多个成员合并的新 Buffer 对象。

实例:

var buf1 = new Buffer("谷歌网址:");
var buf2 = new Buffer("www.google.com");
var buf3 = Buffer.concat([buf1,buf2]);
console.log('buf1的内容为:'+buf1.toString()); //buf1的内容为:谷歌网址:
console.log('buf2的内容为:'+buf2.toString()); //buf2的内容为:www.google.com
console.log('buf3的内容为:'+buf3.toString()); //buf3的内容为:谷歌网址:www.google.com

缓冲区拷贝

语法:

buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])

参数:

参数描述如下:

  • targetBuffer - 要拷贝的 Buffer 对象。
  • targetStart - 数字, 可选, 默认: 0
  • sourceStart - 数字, 可选, 默认: 0
  • sourceEnd - 数字, 可选, 默认: buffer.length

返回值:

没有返回值。

实例:

var buf1 = new Buffer('ABC');
// 拷贝一个缓冲区
var buf2 = new Buffer(2);
var buf3 = new Buffer(3);
var buf4 = new Buffer(5);
var buf5 = new Buffer('abcdef');
buf1.copy(buf2);
buf1.copy(buf3);
buf1.copy(buf4);
buf1.copy(buf5);
console.log("buf2 content: " + buf2.toString()); //buf2 content: AB
console.log("buf3 content: " + buf3.toString()); //buf3 content: ABC
console.log("buf4 content: " + buf4.toString()); //buf4 content: ABC 因为开辟出来的内存大了些,所以这里接一堆怪符号
console.log("buf5 content: " + buf5.toString()); //buf5 content: ABCdef

缓冲区裁剪

语法:

buf.slice([start][, end])

参数:

参数描述如下:

  • start - 数字, 可选, 默认: 0
  • end - 数字, 可选, 默认: buffer.length

返回值:

返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。

实例:

var buffer1 = new Buffer('runoob');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString()); //buffer2 content: ru

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
NodeJS处理Express中异步错误
Mar 26 NodeJs
详解nodejs微信公众号开发——2.自动回复
Apr 10 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
Nodejs把接收图片base64格式保存为文件存储到服务器上
Sep 26 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
NodeJS多种创建WebSocket监听的方式(三种)
Jun 04 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 #NodeJs
Nodejs处理异常操作示例
Dec 25 #NodeJs
Nodejs模块的调用操作实例分析
Dec 25 #NodeJs
nodejs中方法和模块用法示例
Dec 24 #NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 #NodeJs
nodejs图片处理工具gm用法小结
Dec 12 #NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 #NodeJs
You might like
十天学会php之第六天
2006/10/09 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
vue组件父子间通信详解(三)
2017/11/07 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
python英语单词测试小程序代码实例
2019/09/09 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
python相对企业语言优势在哪
2020/06/12 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
python代码实现猜拳小游戏
2020/11/30 Python
伦敦一卡通:The London Pass
2018/11/30 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
女大学生自我鉴定
2013/12/09 职场文书
毕业实习个人鉴定范文
2013/12/10 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
协会周年庆活动方案
2014/08/26 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
创业计划书之网络外卖
2019/10/31 职场文书