微信小程序 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 相关文章推荐
用jQuery技术实现Tab页界面之二
Sep 21 Javascript
JQuery对表格进行操作的常用技巧总结
Apr 23 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
Aug 22 Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
Mar 01 Javascript
Node.js简单入门前传
Aug 21 Javascript
详解使用VueJS开发项目中的兼容问题
Aug 02 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
vue + axios get下载文件功能
Sep 25 Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 Javascript
Vue组件基础用法详解
Feb 05 Javascript
vue 实现图片懒加载功能
Dec 31 Vue.js
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启动时候提示PHP startup的解决方法
2013/05/07 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
javascript 一些用法小结
2009/09/11 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
angularjs实现猜数字大小功能
2020/05/20 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
Django 反向生成url实例详解
2019/07/30 Python
使用python实现滑动验证码功能
2019/08/05 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
python识别验证码图片实例详解
2020/02/17 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
业务助理岗位职责
2013/11/18 职场文书
《凡卡》教学反思
2014/04/09 职场文书
移风易俗倡议书
2014/04/15 职场文书
公证委托书格式
2014/09/13 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电