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的10个性能优化技巧
Jul 15 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
Jan 01 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
nodejs调用cmd命令实现复制目录
May 04 NodeJs
进阶之初探nodeJS
Jan 24 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 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
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
在textarea中屏蔽js的某个function的javascript代码
2007/04/20 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
JavaScript定时器实现的原理分析
2016/12/06 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
2017/10/26 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
SQL Server面试题
2013/04/04 面试题
大学生活学习的自我评价
2013/12/03 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
农村党支部承诺书
2015/04/30 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis