微信小程序 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代码
Apr 22 Javascript
js对象与打印对象分析比较
Apr 23 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
使用JQuery在线制作ppt并在线演示源码特效
Sep 08 Javascript
Knockout自定义绑定创建方法
Dec 26 Javascript
js改变html的原有内容实现方法
Oct 05 Javascript
ajax异步请求详解
Jan 06 Javascript
JS实现微信摇一摇原理解析
Jul 22 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
Oct 20 Javascript
vue中使用vue-cli接入融云实现即时通信
Apr 19 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 Javascript
用vue 实现手机触屏滑动功能
May 28 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
PHP面向对象法则
2012/02/23 PHP
php简单统计在线人数的方法
2016/05/10 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
python 画函数曲线示例
2019/12/04 Python
python列表返回重复数据的下标
2020/02/10 Python
tensorflow多维张量计算实例
2020/02/11 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
九年级英语教学反思
2014/01/31 职场文书
网页美工求职信
2014/02/15 职场文书
农行心得体会
2014/09/02 职场文书
党员对照检查材料
2014/09/22 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
2015年工会工作总结
2015/03/30 职场文书
债务追讨律师函
2015/06/24 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书