微信小程序 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 可拖拽的窗体控件实现代码
Mar 21 Javascript
解决JS浮点数运算出现Bug的方法
Mar 12 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
jQuery实用技巧必备(下)
Nov 03 Javascript
浏览器复制插件zeroclipboard使用指南
Mar 26 Javascript
从零开始搭建一个react项目开发
Feb 09 Javascript
浅谈React高阶组件
Mar 28 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
vue获取form表单的值示例
Oct 29 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
Feb 05 Javascript
React中使用Vditor自定义图片详解
Dec 25 Javascript
vue-resource 拦截器interceptors使用详解
Jan 18 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
杏林同学录(六)
2006/10/09 PHP
浅析is_writable的php实现
2013/06/18 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
使用javascript插入样式
2016/03/14 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
Python中shutil模块的学习笔记教程
2017/04/04 Python
python生成多个只含0,1元素的随机数组或列表的实例
2018/11/12 Python
Python3模拟登录操作实例分析
2019/03/12 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
Python进程池Pool应用实例分析
2019/11/27 Python
python中p-value的实现方式
2019/12/16 Python
浅谈在JupyterNotebook下导入自己的模块的问题
2020/04/16 Python
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
KTV的创业计划书范文
2014/02/02 职场文书
白血病募捐倡议书
2014/05/14 职场文书
员工年终自我评价
2014/09/14 职场文书
2015年考研复习计划
2015/01/19 职场文书
2016新年致辞
2015/08/01 职场文书
导游词之崇武古城
2019/10/07 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python