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使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
nodejs爬虫抓取数据乱码问题总结
Jul 03 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 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+APACHE实现用户论证的方法
2006/10/09 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
2017/04/13 jQuery
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python global全局变量函数详解
2018/09/18 Python
Python跳出多重循环的方法示例
2019/07/03 Python
python修改文件内容的3种方法详解
2019/11/15 Python
python_mask_array的用法
2020/02/18 Python
超市营业员求职简历的自我评价
2013/10/17 职场文书
户外宣传策划方案
2014/05/25 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android