微信小程序 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 tools之tooltip
Jul 25 Javascript
javascript类继承机制的原理分析
Sep 12 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
Sep 14 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
Jun 13 Javascript
Vue.js第四天学习笔记
Dec 02 Javascript
原生js实现商品放大镜效果
Jan 12 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
Apr 26 Javascript
vue webpack打包优化操作技巧
Feb 22 Javascript
微信小程序实现上传图片功能
May 28 Javascript
vuejs前后端数据交互之从后端请求数据的实例
Aug 11 Javascript
js中的闭包实例展示
Nov 01 Javascript
Vue实现滑动拼图验证码功能
Sep 15 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个人网站架设连环讲(三)
2006/10/09 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
CSS+jQuery实现的一个放大缩小动画效果
2013/09/24 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
jquery实现倒计时功能
2015/12/28 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
python爬虫如何解决图片验证码
2021/02/14 Python
翻译专业应届生求职信
2013/11/23 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
公司周年庆典标语
2014/10/07 职场文书
2014年销售工作总结范文
2014/12/01 职场文书
2014年医务科工作总结
2014/12/18 职场文书
文案策划岗位职责
2015/02/11 职场文书