微信小程序 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 相关文章推荐
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
Apr 21 Javascript
解析瀑布流布局:JS+绝对定位的实现
May 08 Javascript
js string 转 int 注意的问题小结
Aug 15 Javascript
javascript中直接引用Microsoft的COM生成Word
Jan 20 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
简述JavaScript的正则表达式中test()方法的使用
Jun 16 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
javascript 判断是否是微信浏览器的方法
Oct 09 Javascript
JS实现瀑布流布局
Oct 21 Javascript
ligerUI的ligerDialog关闭刷新的方法
Sep 27 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
Feb 11 Javascript
JavaScript中while循环的基础使用教程
Aug 11 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获取发送给用户的header信息的方法
2015/03/16 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Javascript实现的分页函数
2007/02/07 Javascript
js event事件的传递与冒泡处理
2009/12/06 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
美国创意之家:BulbHead
2017/07/12 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
中学教师请假制度
2014/02/03 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
煤矿安全承诺书
2014/05/22 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android