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的模块写法入门(实例代码)
Mar 07 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
用nodeJS搭建本地文件服务器的几种方法小结
Mar 16 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
Windows下使用Nodejs运行js的方法
Sep 02 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 NodeJs
nodejs实现百度舆情接口应用示例
Feb 07 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
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
小程序如何获取多个formId实现详解
2019/09/20 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
Python编程中time模块的一些关键用法解析
2016/01/19 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
大课间体育活动方案
2014/03/12 职场文书
三年级小学生评语
2014/04/22 职场文书
党委班子对照检查材料
2014/08/19 职场文书
教师个人总结范文
2015/02/11 职场文书
教师求职自荐信
2015/03/26 职场文书
《1942》观后感
2015/06/08 职场文书
党员电教片《信仰》心得体会
2016/01/15 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
Python开发简易五子棋小游戏
2022/05/02 Python