注:此博客是在学习进击Node.js基础(二)这门课程时的学习笔记,感谢Scott老师的课程。
buffer在nodejs里处理二进制数据,因为js字符串是以UTF-8存储的,处理二进制的能力很弱。而网络层对请求和响应的处理都是二进制的,所以nodejs就有buffer这个接口作为专门存放二进制数据的缓存区,并提供了一些方法可对缓存区的数据进行处理。buffer在nodejs里是可以全局访问的,不需要require来引用和加载它。
Buffer是一个对象,也是一个构造函数,具有自己的属性和静态方法,通过Buffer new出来的实例其实代表的是V8引擎里的一段内存,实际上也是一段数组,成员都是整数值。Buffer传参时需要指定格式的,默认是UTF-8
在命令行里输入以下
new Buffer('Hello 慕课网');
返回:
$ <Buffer 48 65 6c 6c 6f 20 e6 85 95 e8 af be e7 bd 91>
因为默认UTF-8。也可以换编码格式
new Buffer('Hello 慕课网', 'base64');
返回:
$ <Buffer 1d e9 65 a1 44>
就是base64格式的字符串。
Buffer可以通过以下方式分配内存:
var buf = new Buffer(8); //分配长度为8的内存
buf.length //打印长度
此外,以下还有三种方式可以实例化buffer
1. 通过直接传参来实例化
var buf2 = new Buffer('12345678');
console.log(buf2)
返回:
$ <Buffer 31 32 33 34 35 36 37 38>
2. 通过指定内存长度,对对分配的内存写入数据来实例化
var buf3 = new Buffer(7);
buf.write('12345678');
console.log(buf3)
返回:
$ <Buffer 31 32 33 34 35 36 37>
第八位没有了,所以只要指定了Buffer的长度,那么写入的超出部分都不会被缓存。
3. 通过数组进行初始化
var buf4 = new Buffer([1,2,3,4]);
console.log(buf4)
返回:
$ <Buffer 01 02 03 04>
可以通过下标来访问数组里的某一个值:
console.log(buf4[1]) //取数组的第二位
返回:
$ 2
注意在Buffer的数组里如果传入小数是直接取整的,如[1, 2.33 ,3 ,4],取到的第二位的值还是2。