微信小程序 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 相关文章推荐
在IE6下发生Internet Explorer cannot open the Internet site错误
Jun 21 Javascript
基于JQUERY的多级联动代码
Jan 24 Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 Javascript
JQuery中Bind()事件用法分析
May 05 Javascript
javascript实现tab切换的四种方法
Nov 05 Javascript
使用 stylelint检查CSS_StyleLint
Apr 28 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
Oct 24 Javascript
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
vue.js轮播图组件使用方法详解
Jul 03 Javascript
vue点击页面空白处实现保存功能
Nov 06 Javascript
vue实现扫码功能
Jan 17 Javascript
JS相册图片抖动放大展示效果的示例代码
Jan 29 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 面向对象实现代码
2009/11/11 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
解决layui 复选框等内置控件不显示的问题
2018/08/14 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
JS实现点击掉落特效
2021/01/29 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
关于Django Models CharField 参数说明
2020/03/31 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python使用smtplib模块发送邮件
2020/12/17 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
化学学院毕业生自荐信范文
2013/12/17 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
公司办公室岗位职责
2014/03/19 职场文书
产品调价通知函
2015/04/20 职场文书
党组织结对共建协议书
2016/03/23 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android