微信小程序 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 EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
May 21 Javascript
jquery动态添加删除div 具体实现
Jul 20 Javascript
js加载读取内容及显示与隐藏div示例
Feb 13 Javascript
connect中间件session、cookie的使用方法分享
Jun 17 Javascript
javascript实现字符串反转的方法
Feb 05 Javascript
javascript闭包(Closure)用法实例简析
Nov 30 Javascript
高效的jquery数字滚动特效
Dec 17 Javascript
jQuery事件对象的属性和方法详解
Sep 09 jQuery
Vue中通过vue-router实现命名视图的问题
Apr 23 Javascript
微信小程序实现列表的横向滑动方式
Jul 15 Javascript
vue项目proxyTable配置和部署服务器
Apr 14 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中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
在JavaScript中实现命名空间
2006/11/23 Javascript
枚举JavaScript对象的函数
2006/12/22 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
在Python中移动目录结构的方法
2016/01/31 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
python des,aes,rsa加解密的实现
2021/01/16 Python
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
个人作风剖析材料
2014/02/02 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle