Buffer的基础使用
一、什么是Buffer
- Buffer是一个类似于数组的对象,用于表示固定长度的字节序列。
- Buffer本质是一段内存空间,专门用来处理二进制数据。
- Buffer大小固定且无法调整。
- Buffer性能较好,可以直接对计算机内存进行操作。
- Buffer每个二进制位元素的大小为1字节(byte),二进制位的元素大小为1bit。
二、如何创建一个Buffer
- Buffer.alloc(val)
可以接受一个number类型的值,代表创建几个字节的Buffer,并且会清空旧的内存数据并且对每个二进制位都清零。
let buf = Buffer.alloc(10)
console.log(buf)
<Buffer 00 00 00 00 00 00 00 00 00 00>
- Buffer.allocUnsafe(val)
与Buffer.alloc()作用相同,但是用Buffer.allocUnsafe(),方法创建的Buffer并不会对旧的数据清空,不会对二进制位清空,所以用这种方法创建的Buffer会有旧的数据。
let buf = Buffer.allocUnsafe(10000)
console.log(buf)
<Buffer 40 f3 57 2d 22 02 00 00 20 b3 57 2d 22 02 00 00 00 20 ...>
- Buffer.from(val)
可以接受String,Array等类型的数据转换成Buffer。
在接受字符串时,会把对应下标的字符串转换成UniCode码表所对应的数字,这个数字会转换成二进制存在Buffer中。
let buf = Buffer.from('hello')
console.log(buf)
<Buffer 68 65 6c 6c 6f>
tips:打印的结果为了方便阅读,会把每一个二进制位转换成16进制来进行展示。
三、其它
- Buffer的其它方法
Buffer.toString(),可以将Buffer转换成所对应的字符串。
let buf = Buffer.from('hello')
console.log(buf.toString())
hello
- 修改Buffer
由于Buffer是一个类数组结构,所以可以通过下标来修改Buffer的值。
let buf = Buffer.from('hello')
buf[0] = 100
console.log(buf.toString())
dello
- 溢出
由于八位二进制所能代表的最大数为255,所以当修改的值超过255时,会出现溢出问题,这时内部将会舍弃高位的数字。(将高于8位的数字全部丢掉)。
let buf = Buffer.from('hello')
buf[0] = 300
console.log(buf)
<Buffer 2c 65 6c 6c 6f>
300所对应的二进制为0001 0010 1100,对应的16进制为12c,所以2c应为12c,
但是由于300超出8位二进制的最大数255,所以舍弃300二进制的高位数,实际取得为0010 1100,所对应的16进制为2c。