微信小程序 Buffer缓冲区的详解


Posted in Javascript onJuly 06, 2017

 微信小程序 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.长度为10的实例
var buf = new Buffer(10)
2.通过给定的数组创建
var buf = new Buffer([10,20,30,40,50])
3.通过字符串创建
var buf = new Buffer("www.csdn.net","utf-8")
utf-8 是默认的编码方式
支持以下编码:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"。

写入缓存区.write()

var buf = new Buffer(200)
var len = buf.write("www.csdn.net")
console.log("写入字节数:" + len)
  • string - 写入缓冲区的字符串。
  • offset - 缓冲区开始写入的索引值,默认为 0 。
  • length - 写入的字节数,默认为 buffer.length
  • encoding - 使用的编码。默认为 ‘utf8' 。

缓存区读取.toString()

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
  1. encoding - 使用的编码。默认为 ‘utf8' 。
  2. start - 指定开始读取的索引位置,默认为 0。
  3. end - 结束位置,默认为缓冲区的末尾。

Buffer转JSON

var buf = new Buffer('www.runoob.com');
var json = buf.toJSON(buf);
console.log(json);

合并 Buffer.concat([,])

var buf = new Buffer("北京")
var buf1 = new Buffer("上海")
var buf2 = Buffer.concat([buf,buf1],12)
console.log(buf2.toString())
  • list用于合并的 Buffer 对象数组列表。
  • totalLength指定合并后Buffer对象的总长度。

比较 .compare(otherBuffer)

在 Node.js v0.12.2 版本引入

var buffer1 = new Buffer("AVCX")
var buffer2 = new Buffer("ACVV")

var result = buffer1.compare(buffer2)

if(result < 0) {
  console.log(buffer1 + " 在 " + buffer2 + "之前");
}else if(result == 0){
  console.log(buffer1 + " 与 " + buffer2 + "相同");
}else {
  console.log(buffer1 + " 在 " + buffer2 + "之后");
}

拷贝 .compare(buffer2)

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
  1. targetBuffer - 要拷贝的 Buffer 对象。
  2. targetStart - 数字, 可选, 默认: 0
  3. sourceStart - 数字, 可选, 默认: 0
  4. sourceEnd - 数字, 可选, 默认: buffer.length
var buf1 = new Buffer("beiJing")
var buf2 = new Buffer(8)
buf1.copy(buf2)
console.log("buf2 content:"+buf2.toString())

剪裁 .slice(buffer2)

buf.slice([start[, end]])
  1. start - 数字, 可选, 默认: 0
  2. end - 数字, 可选, 默认: buffer.length

返回值

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

var buf1 = new Buffer("beiJing")
var buf2 = buf1.slice(0,8)
console.log("buf2 content:"+buf2)
// beiJing

长度 .length

buf.length;

//返回这个 buffer 的 bytes 数。注意这未必是 buffer 里面内容的大小。length 是 buffer 对象所分配的内存数,它不会随着这个 buffer 对象内容的改变而改变。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
May 29 Javascript
JS实现清除指定cookies的方法
Sep 20 Javascript
AngularJS中的模块详解
Jan 29 Javascript
jquery制作多功能轮播图插件
Apr 02 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
Aug 24 Javascript
JS中使用 after 伪类清除浮动实例
Mar 01 Javascript
详解用函数式编程对JavaScript进行断舍离
Sep 18 Javascript
详解如何在Vue项目中发送jsonp请求
Oct 25 Javascript
jquery 插件重新绑定的处理方法分析
Nov 23 jQuery
Vue脚手架编写试卷页面功能
Mar 17 Javascript
VUE axios发送跨域请求需要注意的问题
Jul 06 #Javascript
vue-cli如何添加less 以及sass
Jul 06 #Javascript
微信小程序 跳转传递数据的实例
Jul 06 #Javascript
详解webpack进阶之插件篇
Jul 06 #Javascript
微信小程序 sha1 实现密码加密实例详解
Jul 06 #Javascript
AngularJS学习笔记之表单验证功能实例详解
Jul 06 #Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
Jul 06 #Javascript
You might like
第十四节--命名空间
2006/11/16 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
php远程请求CURL实例教程(爬虫、保存登录状态)
2020/12/10 PHP
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
Python实现E-Mail收集插件实例教程
2019/02/06 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
美国知名生活购物网站:Goop
2017/11/03 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
标准毕业生自荐信范文
2013/11/04 职场文书
运动会入场解说词300字
2014/01/25 职场文书
食品安全责任书
2014/04/15 职场文书
中学生评语大全
2014/04/18 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
vue+spring boot实现校验码功能
2021/05/27 Vue.js
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android