微信小程序 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 API 中文文档 - Tabs标签页/选项卡
Oct 01 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
Dec 12 Javascript
在JS中解析HTML字符串示例代码
Apr 16 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
javascript实现的元素拖动函数宿主为浏览器
Jul 21 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
jQuery实现切换字体大小的方法
Mar 10 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
Nov 21 Javascript
jQuery中ajax错误调试分析
Dec 01 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
Dec 16 Javascript
Angular2自定义分页组件
Apr 19 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
Jul 14 jQuery
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中函数内引用全局变量的方法
2008/10/20 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
js实现适配移动端的拖动效果
2020/01/13 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
Python一个简单的通信程序(客户端 服务器)
2019/03/06 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
2020/01/09 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
简单租房协议书
2014/10/21 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
2015出纳试用期工作总结
2014/12/12 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
话题作文之成长
2019/12/09 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers