微信小程序 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鼠标划过切换效果
Jun 30 Javascript
TinyMCE 新增本地图片上传功能
Nov 05 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
Jul 31 Javascript
jQuery Tools tab使用介绍
Jul 14 Javascript
jQuery获取节点和子节点文本的方法
Jul 22 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
javascript每日必学之继承
Feb 23 Javascript
js实现鼠标左右移动,图片也跟着移动效果
Jan 25 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
Vue 实现列表动态添加和删除的两种方法小结
Sep 07 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 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获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
浅谈JS函数节流防抖
2017/10/18 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
angular中的post请求处理示例详解
2020/06/30 Javascript
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
中国最大的团购网站:聚划算
2016/09/21 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
大学生职业生涯规划书模版
2013/12/30 职场文书
好的演讲稿开场白
2013/12/30 职场文书
教师读书活动总结
2014/05/07 职场文书
中文专业求职信
2014/06/20 职场文书
交通志愿者活动总结
2014/06/27 职场文书
保密工作目标责任书
2014/07/28 职场文书
校车安全责任书
2014/08/25 职场文书
五心教育心得体会
2014/09/04 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
详解python字符串驻留技术
2021/05/21 Python