微信小程序 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 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
js 代码集(学习js的朋友可以看下)
Jul 22 Javascript
javascript for循环设法提高性能
Feb 24 Javascript
28个JS验证函数收集
Mar 02 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
JQuery控制radio选中和不选中方法总结
Apr 15 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
Nov 22 Javascript
开发用到的js封装方法(20种)
Oct 12 Javascript
vscode下的vue文件格式化问题
Nov 28 Javascript
Vue安装浏览器开发工具的步骤详解
May 12 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 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/10/09 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
浅谈php和.net的区别
2014/09/28 PHP
nodejs开发环境配置与使用
2014/11/17 NodeJs
Jquery easyui 实现动态树
2015/11/17 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
python更改已存在excel文件的方法
2018/05/03 Python
浅谈Python基础—判断和循环
2019/03/22 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
Python list和str互转的实现示例
2020/11/16 Python
小学教师学期末自我评价
2013/09/25 职场文书
求职信格式要求
2014/05/23 职场文书
挂职学习心得体会
2014/09/09 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书
继承公证书格式
2015/01/26 职场文书
教师节领导致辞
2015/07/29 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书